Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Usługi Cloud Services (wersja klasyczna) są teraz przestarzałe dla wszystkich klientów od 1 września 2024 r. Wszystkie istniejące uruchomione wdrożenia zostaną zatrzymane i zamknięte przez firmę Microsoft, a dane zostaną trwale utracone od października 2024 r. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager w usługach Azure Cloud Services (wsparcie dodatkowe).
Ten artykuł zawiera omówienie sposobu użycia ról webowych i roboczych języka Python za pomocą narzędzi Python Tools for Visual Studio. Dowiedz się, jak używać programu Visual Studio do tworzenia i wdrażania podstawowej usługi w chmurze, która używa języka Python.
Wymagania wstępne
- Program Visual Studio w wersji 2013, 2015 lub 2017
- Python Tools for Visual Studio (PTVS)
-
Narzędzia Azure SDK dla Visual Studio (VS) 2013 lub
Azure SDK Narzędzia dla VS 2015 lub
Azure SDK Tools for VS 2017 - 32-bitowy język Python 2.7 lub Python 3.8 w wersji 32-bitowej
Uwaga
Do wykonania kroków tego samouczka potrzebne jest konto platformy Azure. Możesz aktywować korzyści dla subskrybentów programu Visual Studio lub zarejestrować się w celu uzyskania bezpłatnego demo.
Jakie są role webowe i pracownicze w Pythonie?
Platforma Azure udostępnia trzy modele obliczeniowe na potrzeby uruchamiania aplikacji: funkcja Web Apps w usłudze Azure App Service, Azure Virtual Machines i Azure Cloud Services. Wszystkie trzy modele obsługują język Python. Usługi chmurowe, które obejmują role internetowe i role robocze, udostępniają rozwiązanie typu Platforma jako usługa (Platform as a Service, PaaS). W ramach usługi w chmurze rola sieci Web zapewnia dedykowany serwer WWW dla usług Internet Information Services (IIS) do hostowania frontendowych aplikacji internetowych. Rola robocza może uruchamiać zadania asynchroniczne, długotrwałe lub wieczyste, niezależnie od interakcji z użytkownikiem lub jego danych wejściowych.
Aby uzyskać więcej informacji, zobacz Co to jest usługa w chmurze?
Uwaga
Chcesz utworzyć prostą witrynę sieci Web?
Jeśli Twój scenariusz obejmuje tylko prosty frontend witryny internetowej, rozważ użycie lekkiej funkcji aplikacji webowych w usłudze Azure App Service. Możesz łatwo przeprowadzić uaktualnienie do usługi w chmurze w przypadku rozwoju witryny sieci Web lub zmiany wymagań. W Centrum dla deweloperów języka Python znajdziesz artykuły, które dotyczą rozwoju funkcji Web Apps w usłudze Azure App Service.
Tworzenie projektu
W programie Visual Studio możesz wybrać pozycję Usługa w chmurze platformy Azure w oknie dialogowym Nowy projekt w obszarze Python.
W kreatorze usługi Azure Cloud Service można utworzyć nowe role web i worker.
Szablon roli procesu roboczego zawiera kod szablonowy do nawiązywania połączenia z kontem usługi Azure Storage lub z usługą Azure Service Bus.
W każdej chwili można dodać role webowe lub robotnicze do istniejącej usługi w chmurze. Możesz dodawać istniejące projekty do rozwiązania lub tworzyć nowe.
Usługa w chmurze może zawierać role zaimplementowane w różnych językach. Na przykład możesz mieć rolę webową zaimplementowaną w Pythonie korzystając z Django, lub rolę procesu roboczego zaimplementowaną w C#. Możesz łatwo komunikować się między rolami, używając kolejek usługi Service Bus lub kolejek magazynowych.
Instalowanie języka Python w usłudze w chmurze
Ostrzeżenie
Skrypty instalacji instalowane z programem Visual Studio (w momencie ostatniej aktualizacji artykułu) nie działają. W tej sekcji opisano sposób obejścia problemu.
Głównym problemem ze skryptami konfiguracji jest to, że nie instalują języka Python. Najpierw należy zdefiniować dwa zadania uruchamiania w pliku ServiceDefinition.csdef. Pierwsze zadanie (PrepPython.ps1) pobiera i instaluje środowiska uruchomieniowe języka Python. Drugie zadanie (PipInstaller.ps1) uruchamia pip, aby zainstalować wszystkie wymagane zależności.
Następujące skrypty zostały napisane dla języka Python w wersji 3.8. Jeśli chcesz korzystać z wersji 2.x języka Python, ustaw plik zmiennej PYTHON2 na on dla dwóch zadań uruchamiania i zadania środowiska uruchomieniowego: <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>
Zmienne PYTHON2 i PYPATH muszą zostać dodane do zadania uruchamiania procesu roboczego. Zmienna PYPATH jest używana tylko wtedy, gdy zmienna PYTHON2 jest ustawiona na wartość on.
<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>
Przykładowy plik 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>
Następnie należy utworzyć pliki PrepPython.ps1 i PipInstaller.ps1 w folderze ./bin roli użytkownika.
PrepPython.ps1
Ten skrypt instaluje język Python. Jeśli zmienna środowiskowa PYTHON2 jest włączona, zostanie zainstalowany język Python 2.7. W przeciwnym razie jest zainstalowany język Python 3.8.
[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
Ten skrypt wywołuje kod pip i instaluje wszystkie zależności w pliku requirements.txt. Jeśli zmienna środowiskowa PYTHON2 jest ustawiona na włączoną, używany jest język Python 2.7. W przeciwnym razie jest używany język Python 3.8.
$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"
}
}
Modyfikowanie skryptu LaunchWorker.ps1
Uwaga
W przypadku projektu roli roboczej plik LauncherWorker.ps1 jest wymagany do uruchomienia pliku startowego. W projekcie web role plik uruchamiania jest określony w właściwościach projektu.
Bin \LaunchWorker.ps1 został pierwotnie utworzony, aby wykonać wiele prac przygotowawczych, ale tak naprawdę nie działa. Zastąp zawartość tego pliku następującym skryptem.
Ten skrypt wywołuje plik worker.py z projektu języka Python. Jeśli zmienna środowiskowa PYTHON2 jest ustawiona na włączoną, używany jest język Python 2.7. W przeciwnym razie jest używany język Python 3.8.
$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
Szablony programu Visual Studio prawdopodobnie utworzyły plik ps.cmd w folderze ./bin . Ten skrypt powłoki wywołuje wcześniejsze skrypty otoki programu PowerShell i umożliwia rejestrowanie na podstawie nazwy otoki programu PowerShell. Jeśli ten plik nie został utworzony, w nim znajduje się następujący skrypt:
@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"
Uruchamianie lokalne
Jeśli ustawisz projekt usługi w chmurze jako projekt startowy i naciśniesz klawisz F5, usługa w chmurze zostanie uruchomiona w lokalnym emulatorze platformy Azure.
Mimo że funkcja PTVS obsługuje uruchamianie w emulatorze, debugowanie (na przykład punkty przerwania) nie działa.
Aby debugować role sieci Web i robocze, możesz ustawić projekt roli jako projekt startowy i debugować go zamiast nich. Można również ustawić wiele projektów startowych. Kliknij prawym przyciskiem myszy rozwiązanie, a następnie wybierz pozycję Ustaw projekty startowe.
Publikowanie na platformie Azure
Aby przeprowadzić publikowanie, kliknij prawym przyciskiem myszy projekt usługi w chmurze w rozwiązaniu, a następnie wybierz pozycję Publikuj.
Podążaj za kreatorem. Jeśli trzeba, włącz pulpit zdalny. Zdalny pulpit jest przydatny, gdy musisz coś zdebugować.
Po zakończeniu konfigurowania ustawień wybierz pozycję Publikuj.
W oknie danych wyjściowych zostanie wyświetlony postęp, a następnie zostanie wyświetlone okno Dziennik aktywności platformy Microsoft Azure.
Wdrożenie potrwa kilka minut, a następnie role sieciowe i/lub role pracownika będą działać w Azure.
Sprawdzanie dzienników
Po uruchomieniu maszyny wirtualnej usługi w chmurze i zainstalowaniu języka Python można sprawdzić dzienniki pod kątem komunikatów o błędach. Te dzienniki znajdują się w folderze C:\Resources\Directory\{role}\LogFiles . Plik PrepPython.err.txt zawiera co najmniej jeden błąd zwracany, gdy skrypt próbuje wykryć instalację środowiska Python, a plik PipInstaller.err.txt może zgłaszać błąd nieaktualnej wersji kodu pip.
Następne kroki
Bardziej szczegółowe informacje na temat pracy z rolami web i worker w narzędziach Python Tools for Visual Studio można znaleźć w dokumentacji PTVS.
Więcej szczegółów dotyczących korzystania z usług Azure na podstawie roli internetowej i roli procesu roboczego, na przykład używania usługi Azure Storage lub Service Bus, można znaleźć w artykułach wymienionych poniżej: