Azure App Service で Python 環境を設定する方法 (Windows)How to set up a Python environment on Azure App Service (Windows)

重要

この記事で説明するとおり Microsoft では、App Service 用の Python の拡張機能を非推奨にし、Linux の App Service の直接デプロイを選択しまました。Microsoft has deprecated the Python extensions for App Service on Windows as described in this article in favor of a direct deployment to App Service on Linux.

Azure App Service は、Web アプリに提供するサービスとしてのプラットフォームです。Web アプリがブラウザーでアクセスされるサイト、自身のクライアントで使用される REST API、またはイベント トリガーされる処理かどうかは関係ありません。Azure App Service is a platform-as-a-service offering for web apps, whether they are sites accessed through a browser, REST APIs used by your own clients, or event-triggered processing. App Service は、Python を使用してアプリの実装を完全にサポートします。App Service fully supports using Python to implement apps.

Azure App Service でのカスタマイズ可能な Python のサポートは、App Service サイトの拡張機能のセットとして提供されます。拡張機能にはそれぞれ Python ランタイムの特定のバージョンが含まれています。Customizable Python support for Azure App Service is provided as a set of App Service site extensions that each contain a specific version of the Python runtime. その後、この記事の説明に従って、希望のパッケージを直接環境にインストールすることができます。You can then install any desired packages directly into that environment, as described in this article. App Service 自体で環境をカスタマイズすることにより、Web アプリ プロジェクトでパッケージを管理したり、アプリ コードと一緒にアップロードする必要はありません。By customizing the environment in the App Service itself, you don't need to maintain packages in your web app projects or upload them with the app code.

ヒント

既定で App Service には、サーバーのルート フォルダーに Python 2.7 と Python 3.4 がインストールされていますが、これらの環境は、カスタマイズしたり、パッケージをインストールすることはできません。また、その存在に依存することもできません。Although App Service by default has Python 2.7 and Python 3.4 installed in root folders on the server, you cannot customize or install packages in these environments, nor should you depend on their presence. 代わりに、この記事の説明どおりに、制御しているサイトの拡張機能に依存する必要があります。You should instead rely on a site extension that you control, as described in this article.

Azure Portal から Python のバージョンを選択するChoose a Python version through the Azure portal

  1. Azure ポータルで Web アプリの App Service を作成します。Create an App Service for your web app on the Azure portal.

  2. App Service のページで、 [開発ツール] セクションまでスクロールし、 [拡張機能] を選択してから、 [+ 追加] を選択します。On the App Service's page, scroll to the Development Tools section, select Extensions, then select + Add.

  3. 必要な Python のバージョンを含む拡張機能まで、一覧を下にスクロールします。Scroll down in the list to the extension that contains the version of Python you want:

    Python の拡張機能を示す Azure Portal

    ヒント

    Python の古いバージョンが必要で、サイト拡張機能の一覧にそれが表示されない場合、次のセクションの説明に従って、Azure Resource Manager を介してインストールすることが可能です。If you need an older version of Python and don't see it listed in the site extensions, you can still install it through the Azure Resource Manager as described in the next section.

  4. 拡張機能を選択し、法的条項に同意して、 [OK] を選択します。Select the extension, accept the legal terms, then select OK.

  5. インストールが完了すると、ポータルに通知が表示されます。A notification appears in the portal when installation is complete.

Azure Resource Manager から Python のバージョンを選択するChoose a Python version through the Azure Resource Manager

Azure Resource Manager テンプレートを使用して App Service をデプロイしている場合は、サイト拡張機能をリソースとして追加します。If you are deploying an App Service with an Azure Resource Manager template, add the site extension as a resource. 具体的には、拡張機能は、入れ子になったリソース (resources の下の resources オブジェクト) として、型 siteextensions および siteextensions.net からの名前で表示されます。Specifically, the extension appears as a nested resource (a resources object under resources) with the type siteextensions and the name from siteextensions.net.

たとえば、python361x64 (Python 3.6.1 x 64) への参照を追加すると、テンプレートは、次のようになります (いくつかのプロパティは省略しています)。For example, after adding a reference to python361x64 (Python 3.6.1 x64), your template may look like the following (some properties omitted):

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

Python インタープリターをポイントする web.config の設定Set web.config to point to the Python interpreter

(ポータルまたは Azure Resource Manager テンプレートのいずれかを使って) サイト拡張機能をインストールすると、次はアプリの web.config ファイルを Python インタープリターへポイントさせます。After installing the site extension (through either the portal or an Azure Resource Manager template), you next point your app's web.config file to the Python interpreter. web.config ファイルは、HttpPlatform (推奨) と FastCGI いずれかを使用して Python 要求を処理する方法を、App Service 上で実行される IIS (7 以降) の Web サーバーに指示します。The web.config file instructs the IIS (7+) web server running on App Service about how it should handle Python requests through either HttpPlatform (recommended) or FastCGI.

サイト拡張機能の python.exe への完全なパスを探し、適切な web.config ファイルを作成および変更します。Begin by finding the full path to the site extension's python.exe, then create and modify the appropriate web.config file.

python.exe へのパスを探すFind the path to python.exe

Python のサイト拡張機能は、Python のバージョンとアーキテクチャ (いくつかの古いバージョンは除きます) に応じた、d:\home の下のフォルダー内にインストールされます。A Python site extension is installed on the server under d:\home in a folder appropriate to the Python version and architecture (except in the case of a few older versions). たとえば、Python 3.6.1 x64 は、d:\home\python361x64 にインストールされます。For example, Python 3.6.1 x64 is installed in d:\home\python361x64. この場合、Python インタープリターの完全なパスは、d:\home\python361x64\python.exe. になります。The full path to the Python interpreter is then d:\home\python361x64\python.exe.

App Service でパスを具体的に確認するには、[App Service] ページで [拡張機能] を選択し、一覧から拡張機能を選択します。To see the specific path on your App Service, select Extensions on the App Service page, then select the extension in the list.

Azure App Service での拡張機能のリスト

この操作では、次のパスを含む拡張機能の説明ページが開きます。This action opens the extension's description page containing the path:

Azure App Service での拡張機能の詳細

拡張機能のパスの表示で問題がある場合、コンソールを使用して手動で検索できます。If you have trouble seeing the path for the extension, you can find it manually using the console:

  1. [App Service] ページで、 [開発ツール] > [コンソール] の順に選択します。On your App Service page, select the Development Tools > Console.
  2. ls ../home または dir ..\home のコマンドを入力して、Python361x64 などの最上位レベルの拡張機能フォルダーを表示します。Enter the command ls ../home or dir ..\home to see the top-level extensions folders, such as Python361x64.
  3. ls ../home/python361x64 または dir ..\home\python361x64 のようなコマンドを入力して、python.exe やその他のインタープリター ファイルが含まれていることを確認します。Enter a command like ls ../home/python361x64 or dir ..\home\python361x64 to verify that it contains python.exe and other interpreter files.

Httpplatform のハンドラーの構成Configure the HttpPlatform handler

HttpPlatform モジュールは、スタンドアロンの Python プロセスに直接ソケット接続を渡します。The HttpPlatform module passes socket connections directly to a standalone Python process. このパススルーにより、任意の Web サーバーを実行することができますが、ローカル Web サーバーを実行するスタートアップ スクリプトが必要になります。This pass-through allows you to run any web server you like, but requires a startup script that runs a local web server. スクリプトは、web.config<httpPlatform> 要素で指定します。ここで、processPath 属性はサイト拡張機能の Python インタープリターをポイントし、arguments 属性はスクリプトと指定する任意の引数をポイントします。You specify the script in the <httpPlatform> element of web.config, where the processPath attribute points to the site extension's Python interpreter and the arguments attribute points to your script and any arguments you want to provide:

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

ここの HTTP_PLATFORM_PORT 環境変数には、ローカル サーバーが localhost からの接続をリッスンするポートが含まれています。The HTTP_PLATFORM_PORT environment variable shown here contains the port that your local server should listen on for connections from localhost. この例では、必要に応じて、別の環境変数 (この場合は SERVER_PORT) を作成する方法も示しています。This example also shows how to create another environment variable, if desired, in this case SERVER_PORT.

FastCGI ハンドラーの構成Configure the FastCGI handler

FastCGI は、要求レベルで動作するインターフェイスです。FastCGI is an interface that works at the request level. IIS は、受信接続を受信し、各要求を 1 つ以上の永続的な Python プロセスで実行されている WSGI アプリへ転送します。IIS receives incoming connections and forwards each request to a WSGI app running in one or more persistent Python processes. wfastcgi パッケージは、Python の各サイト拡張機能と共にプレインストールされ構成されているため、以下の Bottle フレームワークを使用した Web アプリ用のコードのように、web.config に含めて簡単に有効にできます。The wfastcgi package is pre-installed and configured with each Python site extension, so you can easily enable it by including the code in web.config like what's shown below for a web app based on the Bottle framework. python.exewfastcgi.py への完全なパスが PythonHandler キーに配置されることに注意してください。Note that the full paths to python.exe and wfastcgi.py are placed in the PythonHandler key:

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

ここで定義した <appSettings> はアプリで環境変数として使用できます。The <appSettings> defined here are available to your app as environment variables:

  • PYTHONPATH の値は、自由に拡張できますが、アプリのルートを含める必要があります。The value for PYTHONPATH may be freely extended but must include the root of your app.
  • WSGI_HANDLER はアプリからインポート可能な WSGI アプリをポイントする必要があります。WSGI_HANDLER must point to a WSGI app importable from your app.
  • WSGI_LOG は省略可能ですが、アプリのデバッグのために推奨します。WSGI_LOG is optional but recommended for debugging your app.

Bottle、Flask、および Django Web アプリ用の web.config コンテンツのその他の詳細については、Azure への発行に関するページをご覧ください。See Publish to Azure for additional details on web.config contents for Bottle, Flask, and Django web apps.

パッケージをインストールするInstall packages

サイトの拡張機能を使用してインストールされた Python インタープリターは、Python 環境の一部にすぎません。The Python interpreter installed through a site extension is only one piece of your Python environment. その環境に別のパッケージもインストールする必要があります。You likely need to install different packages in that environment as well.

サーバー環境にパッケージを直接インストールするには、次のいずれかの方法を使用します。To install packages directly in the server environment, use one of the following methods:

メソッドMethods 使用方法Usage
Azure App Service Kudu コンソールAzure App Service Kudu console パッケージを対話形式でインストールします。Installs packages interactively. パッケージは、純粋な Python であるか、ホイールを発行する必要があります。Packages must be pure Python or must publish wheels.
Kudu REST APIKudu REST API パッケージのインストールを自動化するために使用できます。Can be used to automate package installation. パッケージは、純粋な Python であるか、ホイールを発行する必要があります。Packages must be pure Python or must publish wheels.
アプリとのバンドルBundle with app プロジェクトに直接パッケージをインストールし、それをアプリの一部として App Service にデプロイすることができます。Install packages directly into your project and then deploy them to App Service as if they were part of your app. 依存関係の数とそれらの更新頻度によっては、これは実用的なデプロイを開始するための最も簡単な方法になる場合があります。Depending on how many dependencies you have and how frequently you update them, this method may be the easiest way to get a working deployment going. ライブラリは、サーバー上の Python のバージョンと正確に一致している必要があります。一致していない場合、デプロイ後に原因不明のエラーが発生します。Be advised that libraries must match the version of Python on the server, otherwise you see obscure errors after deployment. しかし、App Service のサイト拡張機能での Python のバージョンは、python.org でリリースされたバージョンとまったく同じであるため、ローカル開発のために互換性のあるバージョンを簡単に取得できます。That said, because the versions of Python in the App Service site extensions are exactly the same as those versions released on python.org, you can easily obtain a compatible version for local development.
仮想環境Virtual environments サポートされていません。Not supported. 代わりに、バンドルを使用し、PYTHONPATH 環境変数をパッケージの場所をポイントするよう設定します。Instead, use bundling and set the PYTHONPATH environment variable to point to the location of the packages.

Azure App Service Kudu コンソールAzure App Service Kudu console

Kudu コンソールは、App Service サーバーとそのファイル システムに直接アクセスするための昇格されたコマンド ライン アクセスを提供します。The Kudu console gives you direct, elevated command-line access to the App Service server and its file system. これは、重要なデバッグ ツールであると同時に、これでパッケージのインストールなどの CLI 操作を実行できます。This is both a valuable debugging tool and allows for CLI operations such as installing packages.

  1. Azure Portal の [App Service] ページから、 [開発ツール] > [高度なツール] を選択し、 [移動] を選択して Kudu を開きます。Open Kudu from your App Service page on the Azure portal by selecting Development Tools > Advanced Tools, then selecting Go. このアクションにより、.scm が挿入されることを除いて、ベースの App Service URL と同じ URL に移動します。This action navigates to a URL that's the same as your base App Service URL except with .scm inserted. たとえば、ベースの URL が https://vspython-test.azurewebsites.net/ の場合、Kudu は (ブックマークを設定できる) https://vspython-test.scm.azurewebsites.net/ にあります。For example, if your base URL is https://vspython-test.azurewebsites.net/ then Kudu is on https://vspython-test.scm.azurewebsites.net/ (which you can bookmark):

    Azure App Service の Kudu コンソール

  2. [デバッグ コンソール] > [CMD] を選択してコンソールを開きます。このコンソールで Python のインストール環境に移動し、既存のライブラリを確認できます。Select Debug console > CMD to open the console, in which you can navigate into your Python installation and see what libraries are already there.

  3. 1 つのパッケージをインストールするには、次の手順を実行します。To install a single package:

    a.a. パッケージのインストール先の Python のインストール フォルダーに移動します (d:\home\python361x64 など)。Navigate to the folder of the Python installation where you want to install the package, such as d:\home\python361x64.

    b.b. python.exe -m pip install <package_name> を使用してパッケージをインストールします。Use python.exe -m pip install <package_name> to install a package.

    Azure App Service の Kudu コンソールを使用して bottle をインストールする例

  4. サーバーに既にアプリ用の requirements.txt がデプロイ済みの場合、それらのすべての要件を次のようにインストールします。If you've deployed a requirements.txt for your app to the server already, install all those requirements as follows:

    a.a. パッケージのインストール先の Python のインストール フォルダーに移動します (d:\home\python361x64 など)。Navigate to the folder of the Python installation where you want to install the package, such as d:\home\python361x64.

    b.b. コマンド python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt を実行します。Run the command python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt.

    requirements.txt は、ローカルおよびサーバーで設定されたのと同じパッケージを簡単に再現できるため、これを使用することをお勧めします。Using requirements.txt is recommended because it's easy to reproduce your exact package set both locally and on the server. requirements.txt に何らかの変更を行った後に、コンソールにアクセスし、コマンドを再実行することを忘れないでください。Just remember to visit the console after deploying any changes to requirements.txt and run the command again.

注意

App Service には C コンパイラがないため、ネイティブ拡張モジュールを使用して任意のパッケージのホイールをインストールする必要があります。There's no C compiler on App Service, so you need to install the wheel for any packages with native extension modules. 多くの普及しているパッケージでは、独自のホイールを提供しています。Many popular packages provide their own wheels. 提供していないパッケージの場合は、ローカルの開発用コンピューターで pip wheel <package_name> を使用してホイールをサイトにアップロードします。For packages that don't, use pip wheel <package_name> on your local development computer and then upload the wheel to your site. 例については、「requirements.txt での必須パッケージの管理」をご覧ください。For an example, see Manage required packages with requirements.txt.

Kudu REST APIKudu REST API

Azure Portal から Kudu コンソールを使用する代わりに、https://yoursite.scm.azurewebsites.net/api/command にコマンドをポストすることで、Kudu REST API からコマンドをリモートで実行することができます。Instead of using the Kudu console through the Azure portal, you can run commands remotely through the Kudu REST API by posting the command to https://yoursite.scm.azurewebsites.net/api/command. たとえば、bottle パッケージをインストールするには、次の JSON を /api/command にポストします。For example, to install the bottle package, post the following JSON to /api/command:

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

コマンドと認証の詳細については、Kudu のドキュメントを参照してください。For information about commands and authentication, see the Kudu documentation.

Azure CLI の az webapp deployment list-publishing-profiles コマンドを使用して、資格情報を参照することもできます (「az webapp deployment」 (az webapp のデプロイ) を参照してください)。You can also see credentials using the az webapp deployment list-publishing-profiles command through the Azure CLI (see az webapp deployment). Kudu コマンドをポストするためのヘルパー ライブラリは GitHub で入手することができます。A helper library for posting Kudu commands is available on GitHub.