Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Cloud Services (klasik), 1 Eylül 2024 itibarıyla tüm müşteriler için kullanım dışı bırakılmıştır. Çalışan tüm dağıtımlar Microsoft tarafından durdurulacak ve kapatılacak ve Veriler Ekim 2024'den itibaren kalıcı olarak kaybolacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.
Bu makalede, Visual Studio için Python Araçları ile Python web ve çalışan rollerini kullanmaya genel bir bakış sunulmuştur. Visual Studio’yu kullanarak Python kullanan temel bir Bulut Hizmetinin nasıl oluşturulup dağıtılacağını öğrenin.
Önkoşullar
- Visual Studio 2013, 2015 veya 2017
- Visual Studio için Python Araçları (PTVS)
-
Visual Studio için Azure SDK Araçları (VS) 2013 veya
VS 2015 için Azure SDK Araçları veya
VS 2017 için Azure SDK Araçları - Python 2.7 32 bit veya Python 3.8 32 bit
Uyarı
Bu öğreticiyi tamamlamak için bir Azure hesabınızın olması gerekir. Visual Studio abone avantajlarınızı etkinleştirebilir ya da ücretsiz deneme için kaydolabilirsiniz.
Python web ve işçi rolleri nelerdir?
Azure, uygulama çalıştırmak için üç işlem modeli sağlar: Azure App Service’teki Web Apps özelliği, Azure Sanal Makineler ve Azure Cloud Services. Python bu üç modeli de destekler. Web ve işçi rolleri içeren Bulut Hizmetleri, Hizmet Olarak Platform (PaaS) sunar. Bir bulut hizmetinde web rolü, ön uç web uygulamalarını barındırmak için ayrılmış bir Internet Information Services (IIS) web sunucusu sağlar. Çalışan rolü, kullanıcı etkileşimi veya girişlerinden bağımsız olarak zaman uyumsuz, uzun süre çalışan veya kalıcı görevler çalıştırabilir.
Daha fazla bilgi için bkz. Bulut Hizmeti nedir?.
Uyarı
Basit bir web sitesi mi oluşturmak istiyorsunuz?
Senaryonuz yalnızca basit bir web sitesi ön ucu içeriyorsa, Azure Uygulama Hizmeti’ndeki basit Web Apps özelliğini kullanmayı düşünün. Web siteniz büyüdükçe ve gereksinimleriniz değiştikçe kolayca Bulut Hizmetleri’ne yükseltebilirsiniz. Azure App Service’teki Web Apps özelliğini geliştirme hakkındaki makaleler için Python Geliştirici Merkezi’ne bakın.
Proje oluşturma
Visual Studio’da, Python altındaki Yeni Proje iletişim kutusunda Azure Bulut Hizmeti’ni seçebilirsiniz.
Azure Bulut Hizmeti sihirbazında, yeni web ve çalışan rolleri oluşturabilirsiniz.
Çalışan rolü şablonu, Azure depolama hesabına veya Azure Service Bus’a bağlamak üzere demirbaş kod ile birlikte gelir.
Herhangi bir zamanda mevcut bulut hizmetine web veya çalışan rolleri ekleyebilirsiniz. Çözümünüze ister mevcut projeleri ekleyin, ister yeni projeler oluşturun.
Bulut hizmetiniz farklı dillerde uygulanan roller içerebilir. Örneğin, Python veya C# çalışan rolleri ile Django kullanılarak uygulanan bir Python web rolünüz olabilir. Service Bus kuyruklarını veya depolama kuyruklarını kullanarak rolleriniz arasında kolaya iletişim kurabilirsiniz.
Bulut hizmetine Python yükleme
Uyarı
Visual Studio ile yüklenen ayar betikleri (bu makalenin son güncelleştirildiği tarihte) çalışmamaktadır. Bu bölümde geçici bir çözüm açıklanmaktadır.
Kurulum betikleriyle ilgili temel sorun Python'ı yüklememeleridir. İlk olarak, ServiceDefinition.csdef dosyasında iki başlangıç görevi tanımlayın. İlk görev (PrepPython.ps1) Python çalışma zamanını indirir ve yükler. İkinci görev (PipInstaller.ps1) sahip olabileceğiniz tüm bağımlılıkları yüklemek üzere pip çalıştırır.
Python 3.8'i hedefleyen aşağıdaki betikler yazılmıştır. Python 2.x sürümünü kullanmak istiyorsanız PYTHON2 değişken dosyasını iki başlangıç görevi ve çalışma zamanı görevi için <Variable name="PYTHON2" value="<mark>on</mark>" /> olarak ayarlayın.
<Startup>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
</Startup>
PYTHON2 ve PYPATH değişkenlerinin çalışan başlangıç görevine eklenmesi gerekir. PYPATH değişkeni yalnızca PYTHON2 değişkeni açık olarak ayarlandığında kullanılır.
<Runtime>
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
<Variable name="PYPATH" value="%SystemDrive%\Python27" />
</Environment>
<EntryPoint>
<ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
Örnek ServiceDefinition.csdef
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureCloudServicePython" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WorkerRole name="WorkerRole1" vmsize="Small">
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
<Setting name="Python2" />
</ConfigurationSettings>
<Startup>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
</Startup>
<Runtime>
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
<Variable name="PYPATH" value="%SystemDrive%\Python27" />
</Environment>
<EntryPoint>
<ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
</WorkerRole>
</ServiceDefinition>
Ardından, rolünüzün ./bin klasöründe PrepPython.ps1 ve PipInstaller.ps1 dosyalarını oluşturun.
PrepPython.ps1
Bu betik python yükler. PYTHON2 ortam değişkeni açık olarak ayarlanırsa Python 2.7 yüklenir, aksi takdirde Python 3.8 yüklenir.
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated){
Write-Output "Checking if Python is installed...$nl"
if ($is_python2) {
& "${env:SystemDrive}\Python27\python.exe" -V | Out-Null
}
else {
py -V | Out-Null
}
if (-not $?) {
$url = "https://www.python.org/ftp/python/3.8.8/python-3.8.8-amd64.exe"
$outFile = "${env:TEMP}\python-3.8.8-amd64.exe"
if ($is_python2) {
$url = "https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi"
$outFile = "${env:TEMP}\python-2.7.18.amd64.msi"
}
Write-Output "Not found, downloading $url to $outFile$nl"
Invoke-WebRequest $url -OutFile $outFile
Write-Output "Installing$nl"
if ($is_python2) {
Start-Process msiexec.exe -ArgumentList "/q", "/i", "$outFile", "ALLUSERS=1" -Wait
}
else {
Start-Process "$outFile" -ArgumentList "/quiet", "InstallAllUsers=1" -Wait
}
Write-Output "Done$nl"
}
else {
Write-Output "Already installed"
}
}
PipInstaller.ps1
Bu betik pip çağırır ve tüm bağımlılıkları requirements.txt dosyasına yükler. PYTHON2 ortam değişkeni açık olarak ayarlanırsa Python 2.7 kullanılır, aksi takdirde Python 3.8 kullanılır.
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated){
Write-Output "Checking if requirements.txt exists$nl"
if (Test-Path ..\requirements.txt) {
Write-Output "Found. Processing pip$nl"
if ($is_python2) {
& "${env:SystemDrive}\Python27\python.exe" -m pip install -r ..\requirements.txt
}
else {
py -m pip install -r ..\requirements.txt
}
Write-Output "Done$nl"
}
else {
Write-Output "Not found$nl"
}
}
LaunchWorker.ps1’i değiştirme
Uyarı
Bir çalışan rolü projesinde, başlangıç dosyasını yürütmek için LauncherWorker.ps1 dosyası gereklidir. Bir web rolü projesinde ise başlangıç dosyası, bunun yerine proje özelliklerinde tanımlanır.
bin\LaunchWorker.ps1 ilk olarak çok fazla hazırlık işi yapmak için oluşturulmuştur, ancak gerçekten işe yaramaz. Bu dosyanın içeriğini aşağıdaki betikle değiştirin.
Bu betik, Python projenizden worker.py dosyasını çağırır. PYTHON2 ortam değişkeni açık olarak ayarlanırsa Python 2.7 kullanılır, aksi takdirde Python 3.8 kullanılır.
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated)
{
Write-Output "Running worker.py$nl"
if ($is_python2) {
cd..
iex "$env:PYPATH\python.exe worker.py"
}
else {
cd..
iex "py worker.py"
}
}
else
{
Write-Output "Running (EMULATED) worker.py$nl"
# Customize to your local dev environment
if ($is_python2) {
cd..
iex "$env:PYPATH\python.exe worker.py"
}
else {
cd..
iex "py worker.py"
}
}
ps.cmd
Visual Studio şablonları büyük olasılıkla ./bin klasöründe bir ps.cmd dosyası oluşturmuştur. Bu kabuk betiği, önceki PowerShell sarmalayıcı betiklerini çağırır ve adlı PowerShell sarmalayıcısının adına göre günlüğe kaydetme sağlar. Bu dosya oluşturulmamışsa, içinde aşağıdaki betik yer alır:
@echo off
cd /D %~dp0
if not exist "%DiagnosticStore%\LogFiles" mkdir "%DiagnosticStore%\LogFiles"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -File %* >> "%DiagnosticStore%\LogFiles\%~n1.txt" 2>> "%DiagnosticStore%\LogFiles\%~n1.err.txt"
Yerel olarak çalıştır
Bulut hizmeti projenizi başlangıç projesi olarak ayarlar ve F5 tuşuna basarsanız, bulut hizmeti yerel Azure öykünücüsünde çalışır.
PTVS öykünücüde çalıştırmayı desteklese de hata ayıklama (örneğin kesme noktaları) çalışmaz.
Web ve çalışan rollerinizin hatalarını ayıklamak için rol projesini başlangıç projesi olarak ayarlayabilir ve bunun hatalarını ayıklayabilirsiniz. Ayrıca, birden fazla başlangıç projesi ayarlayabilirsiniz. Çözüme sağ tıklayın ve ardından Başlangıç Projelerini Ayarla’yı seçin.
Azure'a Yayımlama
Yayımlamak için, çözümdeki bulut hizmeti projesine sağ tıklayın ve ardından Yayımla’yı seçin.
Sihirbazı takip edin. Gerekirse uzak masaüstünü etkinleştirin. Uzak masaüstü, bir sorunu çözmeniz gerektiğinde yararlıdır.
Ayarları yapılandırmayı bitirdiğinizde Yayımla'yı seçin.
Çıkış penceresinde bir ilerleme durumu görünür ve ardından Microsoft Azure Etkinlik Günlüğü penceresini görürsünüz.
Dağıtımın tamamlanması birkaç dakika sürer, ardından web ve/veya çalışan rolleri Azure üzerinde çalışır!
Günlükleri araştır
Bulut hizmeti sanal makinesi başlatılıp Python’u yükledikten sonra herhangi bir hata iletisini bulmak için günlüklere bakabilirsiniz. Bu günlükler C:\Resources\Directory\{role}\LogFiles klasöründe bulunur. Betiğin Python’un yüklü olup olmadığını algılamaya çalışmasından itibaren PrepPython.err.txt dosyasında en az bir hata olur ve PipInstaller.err.txt eskimiş bir pip sürümünü şikayet edebilir.
Sonraki Adımlar
Visual Studio için Python Araçları’ndaki web ve çalışan rolleri ile çalışma hakkında daha ayrıntılı bilgi için PTVS belgelerine bakın:
Web ve çalışan rollerinizden Azure Storage veya Service Bus gibi Azure hizmetlerini kullanma hakkında daha ayrıntılı bilgi için aşağıdaki makalelere göz atın: