Jak skonfigurować środowisko języka Python na Azure App Service (Windows)

Ważne

Firma Microsoft wycofała rozszerzenia języka Python dla języka App Service na platformie Windows zgodnie z opisem w tym artykule na rzecz bezpośredniego wdrożenia usługi App Service dla systemu Linux.

Azure App Service to oferta platformy jako usługi dla aplikacji internetowych, niezależnie od tego, czy są to witryny dostępne za pośrednictwem przeglądarki, interfejsy API REST używane przez twoich klientów, czy przetwarzanie wyzwalane zdarzeniami. App Service w pełni obsługuje implementowanie aplikacji przy użyciu języka Python.

Dostosowywalna obsługa języka Python Azure App Service jest dostępna jako zestaw rozszerzeń App Service witryn, z których każde zawiera określoną wersję środowiska uruchomieniowego języka Python. Następnie możesz zainstalować dowolne żądane pakiety bezpośrednio w tym środowisku, zgodnie z opisem w tym artykule. Dzięki dostosowywaniu środowiska w App Service nie trzeba utrzymywać pakietów w projektach aplikacji internetowych ani przekazywać ich za pomocą kodu aplikacji.

Porada

Chociaż program App Service domyślnie ma zainstalowane środowisko Python 2.7 i Python 3.4 w folderach głównych na serwerze, nie można dostosowywać ani instalować pakietów w tych środowiskach ani nie należy polegać na ich obecności. Zamiast tego należy polegać na rozszerzeniu lokacji, które kontrolujesz, zgodnie z opisem w tym artykule.

Wybieranie wersji języka Python za pośrednictwem Azure Portal

  1. Utwórz App Service aplikacji internetowej na stronie Azure Portal.

  2. Na App Service strony aplikacji przewiń do sekcji Narzędzia programowe, wybierz pozycję Rozszerzenia, a następnie wybierz pozycję + Dodaj.

  3. Przewiń listę w dół do rozszerzenia zawierającego wersję języka Python, której potrzebujesz:

    Azure Portal z rozszerzeniami języka Python

    Porada

    Jeśli potrzebujesz starszej wersji języka Python i nie widzisz jej na liście rozszerzeń witryny, możesz ją zainstalować za pośrednictwem witryny Azure Resource Manager zgodnie z opisem w następnej sekcji.

  4. Wybierz rozszerzenie, zaakceptuj postanowienia prawne, a następnie wybierz przycisk OK.

  5. Po zakończeniu instalacji w portalu zostanie wyświetlone powiadomienie.

Wybieranie wersji języka Python za pośrednictwem Azure Resource Manager

W przypadku wdrażania szablonu App Service szablonu Azure Resource Manager dodaj rozszerzenie lokacji jako zasób. W szczególności rozszerzenie jest wyświetlane jako zagnieżdżony zasób resources (obiekt w resources obszarze ) o typie siteextensions .

Na przykład po dodaniu odwołania do (Python 3.6.1 x64) szablon może wyglądać podobnie do następującego (niektóre właściwości python361x64 zostały pominięte):

"resources": [
  {
    "apiVersion": "2015-08-01",
    "name": "[parameters('siteName')]",
    "type": "Microsoft.Web/sites",

    // ...

    "resources": [
      {
        "apiVersion": "2015-08-01",
        "name": "python361x64",
        "type": "siteextensions",
        "properties": { },
        "dependsOn": [
          "[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
        ]
      },
      // ...
    ]
  }

Ustaw web.config, aby wskazać interpreter języka Python

Po zainstalowaniu rozszerzenia witryny (za pośrednictwem portalu lub szablonu Azure Resource Manager) należy następnie wskazać interpreter języka Python w plikuweb.config aplikacji. Plik web.config instruuje serwer internetowy usług IIS (7+) uruchomiony na platformie App Service o tym, jak powinien obsługiwać żądania języka Python za pośrednictwem protokołu HttpPlatform (zalecane) lub FastCGI.

Zacznij od znalezienia pełnej ścieżki do pliku rozszerzenia lokacjipython.exe następnie utwórz i zmodyfikuj odpowiedniweb.config lokacji.

Znajdź ścieżkę do python.exe

Rozszerzenie witryny języka Python jest instalowane na serwerze w folderze d:\home w folderze odpowiednim dla architektury i wersji języka Python (z wyjątkiem kilku starszych wersji). Na przykład język Python 3.6.1 x64 jest instalowany w folderze d:\home\python361x64. Pełna ścieżka do interpretera języka Python jest następnie d:\home\python361x64\python.exe.

Aby wyświetlić określoną ścieżkę na App Service, wybierz pozycję Rozszerzenia na stronie App Service, a następnie wybierz rozszerzenie na liście.

Lista rozszerzeń w Azure App Service

Ta akcja powoduje otwarcie strony opisu rozszerzenia zawierającej ścieżkę:

Szczegóły rozszerzenia na Azure App Service

Jeśli masz problemy z wyświetlaniem ścieżki rozszerzenia, możesz je znaleźć ręcznie przy użyciu konsoli programu :

  1. Na stronie App Service wybierz konsolę narzędzi > programistyki.
  2. Wprowadź polecenie lub , aby wyświetlić foldery rozszerzeń ls ../home najwyższego poziomu, takie jak dir ..\home Python361x64.
  3. Wprowadź polecenie, takie ls ../home/python361x64 jak lub , aby dir ..\home\python361x64 sprawdzić, czy zawiera python.exe i inne pliki interpretera.

Konfigurowanie programu obsługi HttpPlatform

Moduł HttpPlatform przekazuje połączenia gniazd bezpośrednio do autonomicznego procesu języka Python. To pass-through umożliwia uruchamianie dowolnego serwera internetowego, ale wymaga skryptu uruchamiania, który uruchamia lokalny serwer internetowy. Skrypt należy określić w elemencie plikuweb.config, gdzie atrybut wskazuje interpreter języka Python rozszerzenia witryny, a atrybut wskazuje skrypt oraz wszelkie argumenty, które <httpPlatform> ** processPath chcesz arguments podać:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="D:\home\Python361x64\python.exe"
                  arguments="D:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="D:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

Zmienna środowiskowa pokazana w tym miejscu zawiera port, na którym serwer lokalny powinien nasłuchiwać połączeń HTTP_PLATFORM_PORT z hosta lokalnego. W tym przykładzie pokazano również, jak utworzyć inną zmienną środowiskową, w razie potrzeby, w tym przypadku SERVER_PORT .

Konfigurowanie programu obsługi FastCGI

FastCGI to interfejs, który działa na poziomie żądania. Usługi IIS odbierają połączenia przychodzące i przesyła dalej każde żądanie do aplikacji WSGI uruchomionej w co najmniej jednym trwałym procesów języka Python. Pakiet wfastcgi jest wstępnie instalowany i konfigurowany z każdym rozszerzeniem witryny języka Python, dzięki czemu można go łatwo włączyć, uwzględniając kod w pliku web.config, jak pokazano poniżej dla aplikacji internetowej opartej na platformie Bottle. Pamiętaj, że pełne ścieżki do python.exe i wfastcgi.py są umieszczane w PythonHandler kluczu:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <!-- The handler here is specific to Bottle; other frameworks vary. -->
    <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
           scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
           resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

Zdefiniowane <appSettings> tutaj są dostępne dla aplikacji jako zmienne środowiskowe:

  • Wartość dla PYTHONPATH może być swobodnie rozszerzona, ale musi zawierać katalog główny aplikacji.
  • WSGI_HANDLER musi wskazać aplikację WSGI, która może zostać zaimportowana z aplikacji.
  • WSGI_LOG jest opcjonalny, ale zalecany do debugowania aplikacji.

Zobacz Publikowanie na platformie Azure, aby uzyskać dodatkoweweb.config zawartości aplikacji internetowych Bottle, Flask i Django.

Instalowanie pakietów

Interpreter języka Python zainstalowany za pośrednictwem rozszerzenia witryny to tylko jeden element środowiska Python. Prawdopodobnie konieczne będzie również zainstalowanie różnych pakietów w tym środowisku.

Aby zainstalować pakiety bezpośrednio w środowisku serwera, użyj jednej z następujących metod:

Metody Użycie
Azure App Service Kudu Instaluje pakiety interaktywnie. Pakiety muszą być w czystym języku Python lub muszą publikować pakiety w języku Wheels.
Kudu REST API Może służyć do automatyzowania instalacji pakietów. Pakiety muszą być w czystym języku Python lub muszą publikować pakiety w języku Wheels.
Wiązanie z aplikacją Instaluj pakiety bezpośrednio w projekcie, a następnie wdrażaj je w App Service tak, jakby były częścią aplikacji. W zależności od tego, ile zależności masz i jak często je aktualizujesz, ta metoda może być najprostszym sposobem na wdrożenie robocze. Należy pamiętać, że biblioteki muszą być zgodne z wersją języka Python na serwerze. W przeciwnym razie po wdrożeniu zostaną zasłonięte błędy. Jednak ze względu na to, że wersje języka Python w rozszerzeniach witryny App Service są dokładnie takie same jak wersje wydane na platformie python.org, można łatwo uzyskać zgodną wersję dla programowania lokalnego.
Środowiska wirtualne Nieobsługiwane. Zamiast tego użyj funkcji stawiania pakietów i ustaw zmienną środowiskową tak, PYTHONPATH aby wskazać lokalizację pakietów.

Azure App Service Kudu

Konsola Kudu zapewnia bezpośredni, podwyższony poziom uprawnień dostępu wiersza polecenia do serwera App Service i jego systemu plików. Jest to cenne narzędzie do debugowania i umożliwia operacje interfejsu wiersza polecenia, takie jak instalowanie pakietów.

  1. Otwórz narzędzie Kudu na stronie App Service na stronie Azure Portal, wybierając pozycję Narzędzia programowe Narzędzia zaawansowane, a następnie > wybierając pozycję Przejdź. Ta akcja powoduje przejście do adresu URL, który jest taki sam jak podstawowy adres URL App Service z wyjątkiem .scm wstawionego adresu URL. Jeśli na przykład twój podstawowy adres URL to Kudu, oznacza to, że jest on https://vspython-test.azurewebsites.net/ https://vspython-test.scm.azurewebsites.net/ (w którym możesz dodać zakładkę):

    Konsola Kudu dla Azure App Service

  2. Wybierz pozycję Debug console CMD (Debuguj konsolę CMD), aby otworzyć konsolę, w której możesz przejść do instalacji języka Python i zobaczyć, > jakie biblioteki już istnieją.

  3. Aby zainstalować pojedynczy pakiet:

    a. Przejdź do folderu instalacji języka Python, w którym chcesz zainstalować pakiet, na przykład d:\home\python361x64.

    b. Użyj python.exe -m pip install <package_name> , aby zainstalować pakiet.

    Przykład instalowania aplikacji Bottle za pośrednictwem konsoli Kudu dla Azure App Service

  4. Jeśli wdrożono już aplikację requirements.txt na serwerze, zainstaluj wszystkie te wymagania w następujący sposób:

    a. Przejdź do folderu instalacji języka Python, w którym chcesz zainstalować pakiet, na przykład d:\home\python361x64.

    b. Uruchom polecenie python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt.

    Użycie requirements.txt jest zalecane, ponieważ można łatwo odtworzyć dokładny pakiet ustawiony lokalnie i na serwerze. Pamiętaj, aby odwiedzić konsolę programu po wdrożeniu wszelkich zmian requirements.txt i ponownie uruchomić polecenie.

Uwaga

Nie ma kompilatora języka C na App Service, więc musisz zainstalować koło dla wszystkich pakietów z natywnymi modułami rozszerzeń. Wiele popularnych pakietów zapewnia własne kółka. W przypadku pakietów, których nie ma, użyj na pip wheel <package_name> lokalnym komputerze dewelopera, a następnie przekaż koło do swojej witryny. Aby uzyskać przykład, zobacz Manage required packages with requirements.txt(Zarządzanie wymaganymi pakietami za pomocą requirements.txt).

Kudu REST API

Zamiast używać konsoli Kudu za pośrednictwem Azure Portal, możesz uruchamiać polecenia zdalnie za pośrednictwem interfejsu API REST Kudu, publikując polecenie w . https://yoursite.scm.azurewebsites.net/api/command Aby na przykład zainstalować bottle pakiet, opublikuj następujący kod JSON w jednakowy /api/command sposób:

{
    "command": 'python.exe -m pip install bottle',
    "dir": '\home\python361x64'
}

Aby uzyskać informacje o poleceniach i uwierzytelnianiu, zobacz dokumentację kudu.

Poświadczenia można również wyświetlić za pomocą polecenia az webapp deployment list-publishing-profiles za pomocą interfejsu wiersza polecenia platformy Azure (zobacz az webapp deployment). Biblioteka pomocników do publikowania poleceń Kudu jest dostępna na GitHub.