Python webes és munkavégző szerepkörök a Visual Studio Python Eszközökkel

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

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.

Új projekt párbeszédpanel

Az Azure Cloud Service varázslóban létrehozhat új webes és feldolgozói szerepköröket.

Az Azure Cloud Service párbeszédpanelje

A feldolgozói szerepkör sablonja sablonkóddal rendelkezik, hogy csatlakozhasson egy Azure-tárfiókhoz vagy az Azure Service Bus szolgáltatáshoz.

Felhőszolgáltatás-megoldás

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.

Parancs szerepkör hozzáadása

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.

Megoldás indítási projekttulajdonságai

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.

Microsoft Azure Publish Sign In

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.

Microsoft Azure-tevékenységnapló ablak

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: