Jak nastavit prostředí Pythonu na Azure App Service (Windows)

Důležité

Společnost Microsoft vyžádá rozšíření Pythonu pro App Service na Windows, jak je popsáno v tomto článku, ve prospěch přímého nasazení do App Service v Linuxu.

Azure App Service je nabídka platformy jako služby pro webové aplikace bez ohledu na to, jestli se jedná o weby přístupné přes prohlížeč, rozhraní REST API používaná vašimi klienty nebo zpracování aktivované událostmi. App Service plně podporuje implementaci aplikací pomocí Pythonu.

Přizpůsobitelná podpora Pythonu pro Azure App Service je k dispozici jako sada rozšíření App Service webu, z nichž každá obsahuje konkrétní verzi modulu runtime Pythonu. Všechny požadované balíčky pak můžete nainstalovat přímo do tohoto prostředí, jak je popsáno v tomto článku. Přizpůsobením prostředí v samotném App Service nemusíte udržovat balíčky v projektech webové aplikace ani je nahrávat s kódem aplikace.

Tip

Přestože App Service ve výchozím nastavení v kořenových složkách na serveru je nainstalovaný Python 2.7 a Python 3.4, nemůžete v těchto prostředích upravovat ani instalovat balíčky, ani byste neměli záviset na jejich přítomnosti. Místo toho byste měli spoléhat na rozšíření webu, které řídíte, jak je popsáno v tomto článku.

Zvolte verzi Pythonu prostřednictvím Azure Portal

  1. Vytvořte App Service pro webovou aplikaci na Azure Portal.

  2. Na stránce App Service přejděte do části Vývojové nástroje, vyberte Rozšíření a pak vyberte + Přidat.

  3. V seznamu se posuňte dolů k rozšíření, které obsahuje verzi Pythonu, kterou chcete:

    Azure Portal s rozšířeními Pythonu

    Tip

    Pokud potřebujete starší verzi Pythonu a nevidíte ji uvedenou v rozšířeních webu, můžete ji přesto nainstalovat prostřednictvím Azure Resource Manager, jak je popsáno v další části.

  4. Vyberte rozšíření, přijměte právní podmínky a pak vyberte OK.

  5. Po dokončení instalace se na portálu zobrazí oznámení.

Zvolte verzi Pythonu prostřednictvím Azure Resource Manager

Pokud nasazujete App Service s Azure Resource Manager, přidejte rozšíření lokality jako prostředek. Rozšíření se konkrétně zobrazí jako vnořený prostředek resources (objekt v resources části ) s typem siteextensions .

Například po přidání odkazu na python361x64 (Python 3.6.1 x64) může šablona vypadat takto (některé vlastnosti jsou vynechány):

"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'))]"
        ]
      },
      // ...
    ]
  }

Nastavte web.config tak, aby odkazovat na interpret Pythonu.

Po instalaci rozšíření webu (prostřednictvím portálu nebo šablony Azure Resource Manager) pak nasídíte souborweb.configaplikace na interpreta Pythonu. Soubor web.config instruuje webový server služby IIS (7+) běžící na App Service o tom, jak by měl zpracovávat požadavky Pythonu prostřednictvím httpplatformu (doporučeno) nebo FastCGI.

Začněte vyhledáním úplné cesty k souboru rozšíření python.exe a pak vytvořte a upravte příslušný web.config souboru.

Najděte cestu k python.exe

Rozšíření webu Pythonu se nainstaluje na server ve složce d:\home ve složce odpovídající verzi a architektuře Pythonu (s výjimkou několika starších verzí). Například Python 3.6.1 x64 je nainstalovaný ve složce d:\home\python361x64. Úplná cesta k interpretu Pythonu se pak d:\home\python361x64\python.exe.

Pokud chcete zobrazit konkrétní cestu v App Service, vyberte na stránce App Service rozšíření a pak v seznamu vyberte rozšíření.

Seznam rozšíření na Azure App Service

Tato akce otevře stránku s popisem rozšíření obsahující cestu:

Podrobnosti o rozšíření v Azure App Service

Pokud máte potíže se zobrazením cesty pro rozšíření, najdete ji ručně pomocí konzoly :

  1. Na stránce App Service vyberte konzolu Vývojové > nástroje.
  2. Zadáním příkazu nebo zobrazíte složky rozšíření ls ../home nejvyšší dir ..\home úrovně, například Python361x64.
  3. Zadejte příkaz jako nebo , abyste ověřili, že obsahujepython.exea ls ../home/python361x64 dir ..\home\python361x64 další interprety.

Konfigurace obslužné rutiny HttpPlatform

Modul HttpPlatform předává připojení soketů přímo samostatnému procesu Pythonu. Tento průsežný přístup umožňuje spustit libovolný webový server, ale vyžaduje spouštěcí skript, který spouští místní webový server. Skript zadáte v elementuweb.config, kde atribut odkazuje na interpret Python rozšíření webu a atribut odkazuje na váš skript a všechny <httpPlatform> argumenty, které chcete ** processPath arguments zadat:

<?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>

Zde zobrazená proměnná prostředí obsahuje port, na který by měl místní server naslouchat připojením HTTP_PLATFORM_PORT z localhost. Tento příklad také ukazuje, jak v případě potřeby vytvořit další proměnnou prostředí v tomto případě SERVER_PORT .

Konfigurace obslužné rutiny FastCGI

FastCGI je rozhraní, které funguje na úrovni požadavku. Služba IIS přijímá příchozí připojení a předává každý požadavek do aplikace WSGI spuštěné v jednom nebo více trvalých procesech Pythonu. Balíček wfastcgi je předem nainstalovaný a nakonfigurovaný s každým rozšířením webu Pythonu, takže ho můžete snadno povolit zahrnutím kódu do souboruweb.config, jak je znázorněno níže pro webovou aplikaci založenou na rozhraní Bottle. Všimněte si, že všechnypython.exe a wfastcgi.py jsou umístěné v PythonHandler klíči :

<?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>

Definované <appSettings> zde jsou pro vaši aplikaci k dispozici jako proměnné prostředí:

  • Hodnota pro PYTHONPATH může být volně rozšířená, ale musí obsahovat kořen vaší aplikace.
  • WSGI_HANDLER musí odkazovat na aplikaci WSGI, která je možné importovat z vaší aplikace.
  • WSGI_LOG je volitelný, ale doporučuje se pro ladění vaší aplikace.

Další podrobnosti o obsahu aplikací Bottle, Flask a Django web.config v tématu Publikování do Azure.

Instalace balíčků

Interpret Pythonu nainstalovaný prostřednictvím rozšíření webu je pouze jednou z vašich prostředí Pythonu. V tomto prostředí budete pravděpodobně muset nainstalovat i různé balíčky.

Pokud chcete instalovat balíčky přímo do serverového prostředí, použijte jednu z následujících metod:

Metody Využití
Azure App Service konzoly Kudu Instaluje balíčky interaktivně. Balíčky musí být čistě v Pythonu nebo musí publikovat soubory wheels.
Kudu REST API Lze použít k automatizaci instalace balíčků. Balíčky musí být čistě v Pythonu nebo musí publikovat soubory wheels.
Sada s aplikací Nainstalujte balíčky přímo do projektu a pak je nasaďte do App Service, jako by byly součástí vaší aplikace. V závislosti na tom, kolik závislostí máte a jak často je aktualizujete, může být tato metoda nejjednodušším způsobem, jak zpracujete nasazení. Doporučujeme, aby knihovny odpovídaly verzi Pythonu na serveru, jinak se po nasazení zobrazí nejasné chyby. Vzhledem k tomu, že verze Pythonu v rozšířeních webu App Service jsou naprosto stejné jako verze vydané v python.org, můžete snadno získat kompatibilní verzi pro místní vývoj.
Virtuální prostředí Nepodporováno Místo toho použijte sdružování a nastavte proměnnou prostředí tak, aby odkazovat PYTHONPATH na umístění balíčků.

Azure App Service konzoly Kudu

Konzola Kudu poskytuje přímý přístup k příkazovému řádku se zvýšenými oprávněními App Service serveru a jeho systému souborů. Jde o cenný ladicí nástroj a umožňuje operace rozhraní příkazového řádku, jako je instalace balíčků.

  1. Otevřete Kudu ze své App Service na webu Azure Portal tak, že vyberete Vývojové nástroje Rozšířené nástroje a > pak vyberete Přejít. Tato akce přejde na adresu URL, která je stejná jako základní adresa URL App Service s výjimkou s .scm vložením. Pokud je vaše základní adresa URL například https://vspython-test.azurewebsites.net/ , je Kudu na https://vspython-test.scm.azurewebsites.net/ adrese (kterou si můžete přidat do záložek):

    Konzola Kudu pro Azure App Service

  2. Vyberte Příkazový řádek konzoly ladění a otevřete konzolu , ve které můžete přejít k instalaci Pythonu a podívat se, které knihovny už > tam jsou.

  3. Instalace jednoho balíčku:

    a. Přejděte do složky instalace Pythonu, kam chcete balíček nainstalovat, například d:\home\python361x64.

    b. Pomocí python.exe -m pip install <package_name> nástroje nainstalujte balíček.

    Příklad instalace láhve prostřednictvím konzoly Kudu pro Azure App Service

  4. Pokud jste už nasadili requirements.txt aplikaci na server, nainstalujte všechny tyto požadavky následujícím způsobem:

    a. Přejděte do složky instalace Pythonu, kam chcete balíček nainstalovat, například d:\home\python361x64.

    b. Spusťte příkaz python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt.

    Použití requirements.txt se doporučuje, protože je snadné reprodukovat přesnou sadu balíčků místně i na serveru. Nezapomeňte pouze navštívit konzolu nástroje po nasazení všech změn requirements.txt a spustit příkaz znovu.

Poznámka

Na počítači není žádný kompilátor jazyka C App Service proto musíte nainstalovat wheel pro všechny balíčky s nativními rozšiřujícími moduly. Mnoho oblíbených balíčků poskytuje vlastní soubory kolečka. Pro balíčky, které ne, použijte na místním vývojovém počítači a pip wheel <package_name> pak nahrajte kolečko na váš web. Příklad najdete v tématu Správa požadovaných balíčků pomocí requirements.txt.

Kudu REST API

Místo použití konzoly Kudu prostřednictvím Azure Portal můžete příkazy spouštět vzdáleně prostřednictvím konzoly Kudu REST API odesláním příkazu do https://yoursite.scm.azurewebsites.net/api/command . Pokud například chcete balíček bottle nainstalovat, do souboru instalujte následující kód /api/command JSON:

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

Informace o příkazech a ověřování najdete v dokumentaci ke Kudu.

Přihlašovací údaje můžete zobrazit také pomocí az webapp deployment list-publishing-profiles příkazu prostřednictvím Azure CLI (viz az webapp deployment). Pomocná knihovna pro publikování příkazů Kudu je k dispozici na GitHub.