Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
A Cloud Services (klasszikus) 2024. szeptember 1-étől minden ügyfél számára elavult. A Microsoft leállítja és megszünteti a meglévő futó telepítéseket, és az adatok véglegesen elvesznek 2024 októberétől. Az új üzemelő példányoknak az Azure Cloud Services új Azure Resource Manager-alapú üzemi modelljét ( kiterjesztett támogatás) kell használniuk.
Ez a cikk áttekintést nyújt a Python webes és feldolgozói szerepköreinek a Python Tools for Visual Studio használatával történő használatáról. Megtudhatja, hogyan hozhat létre és telepíthet egy Pythont használó alapszintű felhőszolgáltatást a Visual Studióval.
Előfeltételek
- Visual Studio 2013, 2015 vagy 2017
- Python Tools for Visual Studio (PTVS)
-
Azure SDK Tools for Visual Studio (VS) 2013 vagy
Azure SDK Tools for VS 2015 vagy
Azure SDK Tools for VS 2017 - Python 2.7 32 bites vagy Python 3.8 32 bites
Megjegyzés
Az oktatóanyag elvégzéséhez egy Azure-fiókra lesz szüksége. Aktiválhatja a Visual Studio előfizetői előnyeit, vagy regisztrálhat egy ingyenes próbaverzióra.
Mik a Python webes és feldolgozói szerepkörök?
Az Azure három számítási modellt biztosít az alkalmazások futtatásához: a Web Apps szolgáltatást az Azure App Service-ben, az Azure Virtual Machinesben és az Azure Cloud Servicesben. Mindhárom modell támogatja a Python eszközt. A webes és feldolgozói szerepköröket is magában foglaló felhőszolgáltatások szolgáltatásként (PaaS) biztosítják a platformot. A felhőszolgáltatáson belül egy webes szerepkör dedikált Internet Information Services-webkiszolgálót (IIS) biztosít az előtérbeli webalkalmazások üzemeltetéséhez. A feldolgozói szerepkörök a felhasználói interakciótól vagy bemenetétől függetlenül aszinkron, hosszú ideig futó vagy állandó feladatokat futtathatnak.
További információ: Mi az a felhőszolgáltatás?.
Megjegyzés
Egyszerű webhelyet szeretne készíteni?
Ha egy egyszerű webhely előterét kívánja futtatni, fontolja meg az Azure App Service egyszerűsített Web Apps szolgáltatásának használatát. Könnyedén frissíthet Cloud Service szolgáltatásra, ha a webhely növekszik és a követelmények változnak. Az Azure App Service Web Apps szolgáltatásának fejlesztésével kapcsolatos cikkeket a Python Fejlesztői központban talál.
Projekt létrehozása
A Visual Studióban az Azure Cloud Service lehetőséget az Új projektpárbeszédpanelEn, a Python alatt választhatja ki.
Az Azure Cloud Service varázslóban létrehozhat új webes és feldolgozói szerepköröket.
A feldolgozói szerepkör sablonja sablonkóddal rendelkezik, hogy csatlakozhasson egy Azure-tárfiókhoz vagy az Azure Service Bus szolgáltatáshoz.
Egy meglévő felhőszolgáltatáshoz bármikor hozzáadhat webes vagy feldolgozói szerepköröket. Hozzáadhat a megoldásában már meglévő projekteket, vagy létrehozhat újakat.
A felhőszolgáltatás tartalmazhat különböző nyelveken kialakított szerepköröket. Például kialakíthat egy Python webes szerepkört, amelyet a Django keretrendszerrel, Python nyelven, vagy C# feldolgozói szerepkörökkel is használhat. A szerepkörök között egyszerűen kommunikálhat Service Bus üzenetsorok vagy tárolási sorok használatával.
A Python telepítése a felhőszolgáltatáson
Figyelmeztetés
A Visual Studióval települt telepítési parancsfájlok (a cikk utolsó frissítésekor) erre a célra nem használhatók. A megoldást ez a szakasz ismerteti.
A beállítási szkriptekkel az a fő probléma, hogy nem telepítik a Pythont. Először definiáljon két indítási feladatot a ServiceDefinition.csdef fájlban. Az első feladat (PrepPython.ps1) letölti és telepíti a Python-futtatókörnyezetet. A második feladat (PipInstaller.ps1) futtatja a "pip" parancsot az esetleges függőségek telepítéséhez.
A következő szkriptek a Python 3.8-at célozták meg. Ha a Python 2.x verzióját szeretné használni, állítsa be az PYTHON2 változófájlt a két indítási feladatokhoz és a futtatási feladathoz: <Variable name="PYTHON2" value="<mark>on</mark>" />.
<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>
A PYTHON2 és PYPATH változókat hozzá kell adni a feldolgozó indítási feladatához. A PYPATH változót csak akkor használja a rendszer, ha a PYTHON2 változó be van kapcsolva.
<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>
ServiceDefinition.csdef példa
<?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>
Ezután hozza létre a PrepPython.ps1 és PipInstaller.ps1 fájlokat a szerepkör ./bin mappájában.
PrepPython.ps1
Ez a parancsfájl telepíti a Pythont. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Python 2.7 van telepítve, ellenkező esetben a Python 3.8 van telepítve.
[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
Ez a szkript meghívja a pipet, és telepíti az összes függőséget a requirements.txt fájlban. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Python 2.7 van használatban, ellenkező esetben a Python 3.8 van használatban.
$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"
}
}
A LaunchWorker.ps1 módosítása
Megjegyzés
Feldolgozói szerepkör-projekt esetén LauncherWorker.ps1 fájl szükséges az indítási fájl végrehajtásához. Egy webes szerepkör-projektben az indítási fájl a projekt tulajdonságai között van definiálva.
A tároló\LaunchWorker.ps1 eredetileg úgy hozták létre, hogy sok előkészítő munkát végezzenek, de nem igazán működik. Cserélje le a fájl tartalmát a következő parancsfájllal.
Ez a szkript meghívja a worker.py fájlt a Python-projektből. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Python 2.7 van használatban, ellenkező esetben a Python 3.8 van használatban.
$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
A Visual Studio-sablonok valószínűleg létrehoztak egy ps.cmd fájlt a ./bin mappában. Ez a rendszerhéj-szkript meghívja az előző PowerShell burkolószkripteket, és a meghívott PowerShell-burkoló neve alapján naplóz. Ha ez a fájl nem lett létrehozva, a következő szkript lesz benne:
@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"
Helyi futtatás
Ha a felhőszolgáltatási projektet állítja be kiindulási projektnek, és lenyomja az F5 billentyűt, a felhőszolgáltatás a helyi Azure-emulátorban fut.
Bár a PTVS támogatja az emulátorban való indítást, a hibakeresés (például töréspontok) nem működik.
A webes és feldolgozói szerepkörök hibakereséséhez állítsa be a szerepkörprojektet kiindulási projektként, és végezzen azon hibakeresést Beállíthat több kiindulási projektet is. Kattintson a jobb gombbal a megoldásra, majd válassza az Indítási projektek beállítása lehetőséget.
Közzététel az Azure-ban
A közzétételhez kattintson a jobb gombbal a felhőszolgáltatás-projektre a megoldásban, majd válassza a Közzététel lehetőséget.
Kövesse a varázslót. Szükség esetén engedélyezze a távoli asztal használatát. A távoli asztal akkor hasznos, amikor valamilyen okból hibakeresést kell végeznie.
Amikor befejezte a beállítások konfigurálását, válassza a Közzététel lehetőséget.
A kimeneti ablakban megjelenik egy folyamat, majd megjelenik a Microsoft Azure Tevékenységnapló ablaka.
Az üzembe helyezés néhány percet vesz igénybe, majd a webes és/vagy feldolgozói szerepkörök el is indulnak az Azure-ban!
Naplók vizsgálata
A felhőszolgáltatás virtuális gépének elindulása és a Python telepítése után áttekintheti, hogy vannak-e a naplókban hibaüzenetek. Ezek a naplók a C:\Resources\Directory\{role}\LogFiles mappában találhatók. PrepPython.err.txt legalább egy hiba van benne, amikor a szkript megpróbálja észlelni, hogy a Python telepítve van-e, és PipInstaller.err.txt panaszkodhat a pip elavult verziójára.
Következő lépések
A PVTS dokumentációban további információkat találhat a webes és feldolgozói szerepkörök használatáról Python Tools for Visual Studio eszközben:
Ha további részletekre kíváncsi az Azure-szolgáltatások webes és feldolgozói szerepkörökből történő használatáról, például az Azure Storage vagy a Service Bus használatáról, olvassa el a következő cikkeket: