Azure App Service Web Apps による Python の構成Configuring Python with Azure App Service Web Apps

このチュートリアルでは、Web Server Gateway Interface (WSGI) に準拠している基本的な Python アプリケーションを Azure App Service Web Appsに作成して構成する方法について説明します。This tutorial describes options for authoring and configuring a basic Web Server Gateway Interface (WSGI) compliant Python application on Azure App Service Web Apps.

仮想環境や、requirements.txt を使用したパッケージ インストールなどの Git デプロイメントの追加の機能を説明します。It describes additional features of Git deployment, such as virtual environment and package installation using requirements.txt.

Bottle、Django、FlaskBottle, Django, or Flask?

Azure Marketplace には、Bottle、Django、Flask フレームワーク用のテンプレートが含まれます。The Azure Marketplace contains templates for the Bottle, Django, and Flask frameworks. 初めての Web アプリを Azure App Service で開発している場合は、Azure ポータルからすばやく作成できます。If you are developing your first web app in Azure App Service, you can create one quickly from the Azure portal:

Azure Portal での Web アプリの作成Web app creation on Azure portal

このチュートリアルは、Azure サブスクリプションを既に所有しており、Azure Portal にアクセスできることを前提としています。This tutorial assumes an existing Azure subscription and access to the Azure portal.

既存の Web アプリがない場合、Azure Portal から自分で作成できます。If you do not have an existing web app, you can create one from the Azure portal. 左上隅で、[リソースの作成] > [Web + Mobile] (Web + モバイル) > [Web アプリ] をクリックします。In the top left corner, click Create a resource > Web + Mobile > Web app.

Git 発行Git Publishing

Azure App Service へのローカル Git デプロイ」の指示に従い、新しく作成した Web アプリで Git 発行を構成します。Configure Git publishing for your newly created web app by following the instructions at Local Git Deployment to Azure App Service. このチュートリアルでは、Python Web アプリの作成と管理、Azure App Service への発行を Git を使用して行います。This tutorial uses Git to create, manage, and publish your Python web app to Azure App Service.

Git 発行の設定が完了すると、Git リポジトリが作成されて Web アプリに関連付けられます。Once Git publishing is set up, a Git repository is created and associated with your web app. このリポジトリの URL が表示され、ローカル開発環境からクラウドにデータをプッシュする目的で使用できます。The repository's URL is displayed and can be used to push data from the local development environment to the cloud. Git を介してアプリケーションを発行するには、Git クライアントを併せてインストールする必要があります。提供されるインストラクションに従って Web アプリのコンテンツを Azure App Service にプッシュしてください。To publish applications via Git, make sure a Git client is also installed and use the instructions provided to push your web app content to Azure App Service.

アプリケーションの概要Application Overview

次のセクションでは、次のファイルが作成されます。In the next sections, the following files are created. これらは、Git リポジトリのルートに配置する必要があります。They should be placed in the root of the Git repository.

app.py
requirements.txt
runtime.txt
web.config
ptvs_virtualenv_proxy.py

WSGI ハンドラーWSGI Handler

WSGI は、PEP 3333 で規定された Python の標準です。Web サーバーと Python 間のインターフェイスを定義します。WSGI is a Python standard described by PEP 3333 defining an interface between the web server and Python. 各種の Web アプリケーションや Web フレームワークを Python を使って記述するためのインターフェイスが標準化されています。It provides a standardized interface for writing various web applications and frameworks using Python. 今日普及している Python Web フレームワークには WSGI が使用されています。Popular Python web frameworks today use WSGI. Web フレームワークに必要な機能は Azure App Service Web Apps に用意されています。また、カスタム ハンドラーを WSGI 仕様のガイドラインに準拠させれば、経験豊富なユーザーが Web フレームワークを独自に制作することも可能です。Azure App Service Web Apps gives you support for any such frameworks; in addition, advanced users can even author their own as long as the custom handler follows the WSGI specification guidelines.

次は、カスタム ハンドラーを定義する app.py の例です。Here's an example of an app.py that defines a custom handler:

def wsgi_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    response_body = 'Hello World'
    yield response_body.encode()

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('localhost', 5555, wsgi_app)
    httpd.serve_forever()

python app.py を使用してこのアプリケーションをローカルで実行し、その後 Web ブラウザーで http://localhost:5555 を参照できます。You can run this application locally with python app.py, then browse to http://localhost:5555 in your web browser.

仮想環境Virtual Environment

上記の例のアプリは外部パッケージを必要としませんが、アプリケーションによっては外部パッケージが必要になる場合があります。Although the preceding example app doesn't require any external packages, it is likely that your application requires some.

外部のパッケージとの依存関係を管理するために、Azure の Git デプロイメントでは、仮想環境の作成がサポートされています。To help manage external package dependencies, Azure Git deployment supports the creation of virtual environments.

Azure がリポジトリのルート ディレクトリに requirements.txt を検出すると、 envという名前の仮想環境が自動的に作成されます。When Azure detects a requirements.txt in the root of the repository, it automatically creates a virtual environment named env. これは、最初のデプロイメント、または選択した Python ランタイムを変更した後のデプロイメント時に発生します。This only occurs on the first deployment, or during any deployment after the selected Python runtime has changed.

開発用の仮想環境をローカルで作成する場合、Git リポジトリには含めないでください。You probably want to create a virtual environment locally for development, but don't include it in your Git repository.

パッケージの管理Package Management

requirements.txt 内のリストにあるパッケージが、pip を使用して仮想環境に自動的にインストールされます。Packages listed in requirements.txt are installed automatically in the virtual environment using pip. これはデプロイごとに発生しますが、パッケージが既にインストールされている場合は、インストールがスキップされます。This happens on every deployment, but pip skips installation if a package is already installed.

requirements.txtExample requirements.txt:

azure==0.8.4

Python バージョンPython Version

Azure では、次の優先順位を使用して、Azure の仮想環境で使用する Python のバージョンが決定されます。Azure will determine the version of Python to use for its virtual environment with the following priority:

  1. ルート フォルダー内の runtime.txt で指定されたバージョンversion specified in runtime.txt in the root folder
  2. Web アプリ構成の Python 設定で指定されたバージョン (Azure Portal の Web アプリの [設定] > [アプリケーションの設定] ブレード)version specified by Python setting in the web app configuration (the Settings > Application Settings blade for your web app in the Azure Portal)
  3. どちらも指定されていない場合の既定値は python-2.7 です。python-2.7 is the default if none of the above are specified

ここで、Valid values for the contents of

\runtime.txt

の内容として有効な値は、次のとおりです。are:

  • python-2.7python-2.7
  • python-3.4python-3.4

マイクロ バージョン (3 番目の桁) が指定されている場合、その桁は無視されます。If the micro version (third digit) is specified, it is ignored.

runtime.txtExample runtime.txt:

python-2.7

web.configWeb.config

サーバーによる要求の処理方法を指定するには、web.config ファイルを作成する必要があります。You need to create a web.config file to specify how the server should handle requests.

リポジトリに web.x.y.config ファイルがある場合は (ここでは x.y は選択した Python ランタイム)、Azure が適切なファイルを web.config として自動的にコピーします。If you have a web.x.y.config file in your repository, where x.y matches the selected Python runtime, then Azure automatically copies the appropriate file as web.config.

次の例の web.config は、次のセクションで説明する仮想環境プロキシ スクリプトに依存します。The following web.config examples rely on a virtual environment proxy script, which is described in the next section. これらの例は、上記の app.py の例で使用した WSGI ハンドラーによって動作します。They work with the WSGI handler used in the example app.py above.

Python 2.7 用の web.config の例:Example web.config for Python 2.7:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="app.wsgi_app" />
    <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS"
         value="D:\home\site\wwwroot\env\Scripts\activate_this.py" />
    <add key="WSGI_HANDLER"
         value="ptvs_virtualenv_proxy.get_virtualenv_handler()" />
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="Python27_via_FastCGI" />
      <remove name="Python34_via_FastCGI" />
      <add name="Python FastCGI"
           path="handler.fcgi"
           verb="*"
           modules="FastCgiModule"
           scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py"
           resourceType="Unspecified"
           requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <conditions>
            <add input="true" pattern="false" />
          </conditions>
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite"
                  url="handler.fcgi/{R:1}"
                  appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Python 3.4 用の web.config の例:Example web.config for Python 3.4:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="app.wsgi_app" />
    <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS"
         value="D:\home\site\wwwroot\env\Scripts\python.exe" />
    <add key="WSGI_HANDLER"
         value="ptvs_virtualenv_proxy.get_venv_handler()" />
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="Python27_via_FastCGI" />
      <remove name="Python34_via_FastCGI" />
      <add name="Python FastCGI"
           path="handler.fcgi"
           verb="*"
           modules="FastCgiModule"
           scriptProcessor="D:\Python34\python.exe|D:\Python34\Scripts\wfastcgi.py"
           resourceType="Unspecified"
           requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <conditions>
            <add input="true" pattern="false" />
          </conditions>
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

パフォーマンスを向上させるために、静的ファイルは、Python コードを介さずに、Web サーバーによって直接処理されます。Static files are handled by the web server directly, without going through Python code, for improved performance.

上記の例では、静的ファイルのディスク上の場所は URL の場所と一致する必要があります。In the preceding examples, the location of the static files on disk should match the location in the URL. つまり、http://pythonapp.azurewebsites.net/static/site.css への要求は、ディスクの \static\site.css にあるファイルを使用します。This means that a request for http://pythonapp.azurewebsites.net/static/site.css will serve the file on disk at \static\site.css.

WSGI_ALT_VIRTUALENV_HANDLER は WSGI ハンドラーを指定する場所です。WSGI_ALT_VIRTUALENV_HANDLER is where you specify the WSGI handler. 上記の例では、ハンドラーはルート フォルダーの app.pywsgi_app という名前の関数であるため、app.wsgi_app になります。In the preceding examples, it's app.wsgi_app because the handler is a function named wsgi_app in app.py in the root folder.

PYTHONPATH はカスタマイズ可能ですが、requirements.txt で指定することで、仮想環境にすべての依存関係をインストールする場合は、変更する必要はありません。PYTHONPATH can be customized, but if you install all your dependencies in the virtual environment by specifying them in requirements.txt, you shouldn't need to change it.

仮想環境のプロキシVirtual Environment Proxy

次のスクリプトは、WSGI ハンドラーの取得、仮想環境のアクティブ化、エラーの記録に使用されます。The following script is used to retrieve the WSGI handler, activate the virtual environment and log errors. 修正することなく、汎用的に使用できます。It is designed to be generic and used without modifications.

ptvs_virtualenv_proxy.pyの内容:Contents of ptvs_virtualenv_proxy.py:

 # ############################################################################
 #
 # Copyright (c) Microsoft Corporation. 
 #
 # This source code is subject to terms and conditions of the Apache License, Version 2.0. A 
 # copy of the license can be found in the License.html file at the root of this distribution. If 
 # you cannot locate the Apache License, Version 2.0, please send an email to 
 # vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
 # by the terms of the Apache License, Version 2.0.
 #
 # You must not remove this notice, or any other, from this software.
 #
 # ###########################################################################

import datetime
import os
import sys
import traceback

if sys.version_info[0] == 3:
    def to_str(value):
        return value.decode(sys.getfilesystemencoding())

    def execfile(path, global_dict):
        """Execute a file"""
        with open(path, 'r') as f:
            code = f.read()
        code = code.replace('\r\n', '\n') + '\n'
        exec(code, global_dict)
else:
    def to_str(value):
        return value.encode(sys.getfilesystemencoding())

def log(txt):
    """Logs fatal errors to a log file if WSGI_LOG env var is defined"""
    log_file = os.environ.get('WSGI_LOG')
    if log_file:
        f = open(log_file, 'a+')
        try:
            f.write('%s: %s' % (datetime.datetime.now(), txt))
        finally:
            f.close()

ptvsd_secret = os.getenv('WSGI_PTVSD_SECRET')
if ptvsd_secret:
    log('Enabling ptvsd ...\n')
    try:
        import ptvsd
        try:
            ptvsd.enable_attach(ptvsd_secret)
            log('ptvsd enabled.\n')
        except: 
            log('ptvsd.enable_attach failed\n')
    except ImportError:
        log('error importing ptvsd.\n')

def get_wsgi_handler(handler_name):
    if not handler_name:
        raise Exception('WSGI_ALT_VIRTUALENV_HANDLER env var must be set')

    if not isinstance(handler_name, str):
        handler_name = to_str(handler_name)

    module_name, _, callable_name = handler_name.rpartition('.')
    should_call = callable_name.endswith('()')
    callable_name = callable_name[:-2] if should_call else callable_name
    name_list = [(callable_name, should_call)]
    handler = None
    last_tb = ''

    while module_name:
        try:
            handler = __import__(module_name, fromlist=[name_list[0][0]])
            last_tb = ''
            for name, should_call in name_list:
                handler = getattr(handler, name)
                if should_call:
                    handler = handler()
            break
        except ImportError:
            module_name, _, callable_name = module_name.rpartition('.')
            should_call = callable_name.endswith('()')
            callable_name = callable_name[:-2] if should_call else callable_name
            name_list.insert(0, (callable_name, should_call))
            handler = None
            last_tb = ': ' + traceback.format_exc()

    if handler is None:
        raise ValueError('"%s" could not be imported%s' % (handler_name, last_tb))

    return handler

activate_this = os.getenv('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS')
if not activate_this:
    raise Exception('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS is not set')

def get_virtualenv_handler():
    log('Activating virtualenv with %s\n' % activate_this)
    execfile(activate_this, dict(__file__=activate_this))

    log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))
    handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))
    log('Got handler: %r\n' % handler)
    return handler

def get_venv_handler():
    log('Activating venv with executable at %s\n' % activate_this)
    import site
    sys.executable = activate_this
    old_sys_path, sys.path = sys.path, []

    site.main()

    sys.path.insert(0, '')
    for item in old_sys_path:
        if item not in sys.path:
            sys.path.append(item)

    log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))
    handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))
    log('Got handler: %r\n' % handler)
    return handler

Git デプロイメントのカスタマイズCustomize Git deployment

Azure は、 次の両方の条件に当てはまる場合、アプリケーションで Python を使用していると判断します。Azure will determine that your application uses Python if both of these conditions are true:

  • requirements.txt ファイルがルート フォルダーにあるrequirements.txt file in the root folder
  • ルート フォルダー内の .py ファイル、または runtime.txt で、python を指定しているany .py file in the root folder OR a runtime.txt that specifies python

両方に当てはまる場合は、Python 固有のデプロイメント スクリプトが使用されます。スクリプトによって、ファイルの標準の同期と、次のような追加の Python 操作が実行されます。When that's the case, it will use a Python specific deployment script, which performs the standard synchronization of files, as well as additional Python operations such as:

  • 仮想環境の自動管理Automatic management of virtual environment
  • requirements.txt に示されているパッケージの、pip を使用したインストールInstallation of packages listed in requirements.txt using pip
  • 選択された Python バージョンに基づく適切な web.config の作成Creation of the appropriate web.config based on the selected Python version.
  • Django アプリケーション用の静的なファイルの収集Collect static files for Django applications

スクリプトをカスタマイズすることなく、既定デプロイメント手順の特定の側面を制御できます。You can control certain aspects of the default deployment steps without having to customize the script.

Python 固有のすべてのデプロイメント手順をスキップする場合は、空のファイルを作成します。If you want to skip all Python specific deployment steps, you can create this empty file:

\.skipPythonDeployment

デプロイメントをより密接に制御するために、次のファイルを作成して、既定のデプロイメント スクリプトをオーバーライドできます。For more control over deployment, you can override the default deployment script by creating the following files:

\.deployment
\deploy.cmd

ファイルの作成には、Azure コマンド ライン インターフェイスを使用できます。You can use the Azure command-line interface to create the files. プロジェクト フォルダーからこのコマンドを使用します。Use this command from your project folder:

azure site deploymentscript --python

これらのファイルが存在しない場合、Azure によって一時的なデプロイメント スクリプトが作成され、それが実行されます。When these files don't exist, Azure creates a temporary deployment script and runs it. スクリプトは上記のコマンドで作成したのと同じです。It is identical to the one you create with the command above.

トラブルシューティング - パッケージのインストールTroubleshooting - Package Installation

一部のパッケージは、Azure での実行時に pip を使用してインストールできません。Some packages may not install using pip when run on Azure. 単に、パッケージが Python Package Index で使用できないだけの場合もあります。It may simply be that the package is not available on the Python Package Index. コンパイラーが必要な場合もあります (コンパイラーは、Azure App Service で Web アプリを実行しているコンピューターでは利用できません)。It could be that a compiler is required (a compiler is not available on the machine running the web app in Azure App Service).

このセクションでは、この問題に対処する方法を紹介します。In this section, we'll look at ways to deal with this issue.

wheel をリクエストするRequest wheels

パッケージのインストールにコンパイラが必要な場合は、パッケージの所有者に連絡して、パッケージ用の wheel を使用可能にするようリクエストします。If the package installation requires a compiler, you should try contacting the package owner to request that wheels be made available for the package.

Python 2.7 用の Microsoft Visual C++ コンパイラが最近使用可能になり、Python 2.7 のネイティブ コードを使用しているパッケージのビルドが容易になりました。With the recent availability of Microsoft Visual C++ Compiler for Python 2.7, it is now easier to build packages that have native code for Python 2.7.

wheel をビルドする (Windows が必要)Build wheels (requires Windows)

このオプションを使用する際は、Azure App Service の Web アプリで使用しているプラットフォーム/アーキテクチャ/バージョン (Windows/32 ビット/2.7 または 3.4) に一致する Python 環境を使用して、パッケージをコンパイルしてください。Note: When using this option, make sure to compile the package using a Python environment that matches the platform/architecture/version that is used on the web app in Azure App Service (Windows/32-bit/2.7 or 3.4).

コンパイラが必要なためにパッケージがインストールできない場合は、ローカル コンピューターにコンパイラをインストールして、パッケージの wheel をビルドすることができます。このパッケージはリポジトリに組み込まれます。If the package doesn't install because it requires a compiler, you can install the compiler on your local machine and build a wheel for the package, which you will then include in your repository.

Mac/Linux ユーザー: Windows コンピューターを使用できない場合は、Azure 上で VM を作成する方法について「Windows を実行する仮想マシンの作成」を参照してください。Mac/Linux Users: If you don't have access to a Windows machine, see Create a Virtual Machine Running Windows for how to create a VM on Azure. その方法に従って、wheel をビルドしてリポジトリに追加し、必要に応じて VM を破棄します。You can use it to build the wheels, add them to the repository, and discard the VM if you like.

Python 2.7 の場合、Python 2.7 用の Microsoft Visual C++ コンパイラをインストールできます。For Python 2.7, you can install Microsoft Visual C++ Compiler for Python 2.7.

Python 3.4 の場合、Microsoft Visual C++ 2010 Express をインストールできます。For Python 3.4, you can install Microsoft Visual C++ 2010 Express.

wheel をビルドするには、wheel パッケージが必要です。To build wheels, you'll need the wheel package:

env\scripts\pip install wheel

pip wheel を使用して依存関係をコンパイルします。You'll use pip wheel to compile a dependency:

env\scripts\pip wheel azure==0.8.4

これによって、\wheelhouse フォルダーに .whl ファイルが作成されます。This creates a .whl file in the \wheelhouse folder. \wheelhouse フォルダーと wheel ファイルをリポジトリに追加します。Add the \wheelhouse folder and wheel files to your repository.

requirements.txt を編集して先頭に --find-links オプションを追加します。Edit your requirements.txt to add the --find-links option at the top. このオプションは、python パッケージのインデックスにアクセスする前に、ローカル フォルダーで完全一致を検索するように pip に指示します。This tells pip to look for an exact match in the local folder before going to the python package index.

--find-links wheelhouse
azure==0.8.4

\wheelhouse フォルダー内のすべての依存関係を組み込む必要があり、python パッケージのインデックスを一切使用しない場合は、requirements.txt の先頭に --no-index を追加すると、pip で強制的にパッケージ インデックスを無視することができます。If you want to include all your dependencies in the \wheelhouse folder and not use the python package index at all, you can force pip to ignore the package index by adding --no-index to the top of your requirements.txt.

--no-index

インストールをカスタマイズするCustomize installation

デプロイ スクリプトをカスタマイズし、easy_install などの代替インストーラーを使用して、仮想環境にパッケージをインストールできます。You can customize the deployment script to install a package in the virtual environment using an alternate installer, such as easy_install. deploy.cmd のコメントアウトされた例を参照してください。pip でインストールされることを避けるため、このようなパッケージを requirements.txt に指定していないことを確認してください。See deploy.cmd for an example that is commented out. Make sure that such packages aren't listed in requirements.txt, to prevent pip from installing them.

これをデプロイメント スクリプトに追加します。Add this to the deployment script:

env\scripts\easy_install somepackage

また、easy_install を使用して、exe インストーラーからインストールすることもできます (一部のインストーラーは zip と互換性があるため、easy_install でサポートされます)。You may also be able to use easy_install to install from an exe installer (some are zip compatible, so easy_install supports them). インストーラーをリポジトリに追加し、パスを実行可能ファイルに渡して easy_install を呼び出します。Add the installer to your repository, and invoke easy_install by passing the path to the executable.

これをデプロイメント スクリプトに追加します。Add this to the deployment script:

env\scripts\easy_install "%DEPLOYMENT_SOURCE%\installers\somepackage.exe"

仮想環境をリポジトリに組み込む (Windows が必要)Include the virtual environment in the repository (requires Windows)

このオプションを使用する際は、Azure App Service の Web アプリで使用しているプラットフォーム/アーキテクチャ/バージョン (Windows/32 ビット/2.7 または 3.4) に一致する仮想環境を使用してください。Note: When using this option, make sure to use a virtual environment that matches the platform/architecture/version that is used on the web app in Azure App Service (Windows/32-bit/2.7 or 3.4).

仮想環境をリポジトリに組み込む場合は、空のファイルを作成することによって、デプロイメント スクリプトで仮想環境の管理が実行されることを回避できます。If you include the virtual environment in the repository, you can prevent the deployment script from doing virtual environment management on Azure by creating an empty file:

.skipPythonDeployment

仮想環境が自動的に管理された場合にファイルが残らないように、アプリ上の既存の仮想環境を削除することをお勧めします。We recommend that you delete the existing virtual environment on the app, to prevent leftover files from when the virtual environment was managed automatically.

トラブルシューティング - 仮想環境Troubleshooting - Virtual Environment

デプロイメント スクリプトで、互換性のある仮想環境が既に存在することが検出された場合、Azure での仮想環境の作成はスキップされます。The deployment script will skip creation of the virtual environment on Azure if it detects that a compatible virtual environment already exists. これにより、デプロイメントが大幅に高速化されます。This can speed up deployment considerably. 既にインストールされているパッケージは pip でスキップされます。Packages that are already installed will be skipped by pip.

特定の状況では、既存の仮想環境を強制的に削除することが必要になる場合があります。In certain situations, you may want to force delete that virtual environment. これが必要になる場合として、仮想環境をリポジトリの一部に組み込むことを決定した場合があります。You'll want to do this if you decide to include a virtual environment as part of your repository. また、特定のパッケージを削除する場合や、requirements.txt に対する変更をテストする場合があります。You may also want to do this if you need to get rid of certain packages, or test changes to requirements.txt.

Azure には既存の仮想環境を管理するためのオプションがいくつかあります。There are a few options to manage the existing virtual environment on Azure:

オプション 1: FTP を使用するOption 1: Use FTP

FTP クライアントを使用してサーバーに接続し、env フォルダーを削除することができます。With an FTP client, connect to the server and you'll be able to delete the env folder. 一部の FTP クライアント (Web ブラウザーなど) は読み取り専用の場合があり、その場合はフォルダーを削除できません。そのため、削除を実行できる FTP クライアントを使用していることを確認してください。Note that some FTP clients (such as web browsers) may be read-only and won't allow you to delete folders, so you'll want to make sure to use an FTP client with that capability. Azure Portal で、Web アプリのブレードに FTP ホストの名前とユーザー名が表示されます。The FTP host name and user are displayed in your web app's blade on the Azure Portal.

オプション 2: ランタイムの切り替えOption 2: Toggle runtime

必要なバージョンの Python と一致しない場合、デプロイメント スクリプトは env フォルダーは削除するという事実を利用した別の方法を次に示します。Here's an alternative that takes advantage of the fact that the deployment script will delete the env folder when it doesn't match the desired version of Python. この方法では、実質的に既存の環境を削除し、新しい環境を作成します。This will effectively delete the existing environment, and create a new one.

  1. 別のバージョンの Python に切り替える (runtime.txt、または Azure Portal の アプリケーション設定 ブレードを使用する)Switch to a different version of Python (via runtime.txt or the Application Settings blade in the Azure Portal)
  2. git で変更をプッシュする (pip インストール エラーがあっても無視)git push some changes (ignore any pip install errors if any)
  3. 最初のバージョンの Python に戻すSwitch back to initial version of Python
  4. git でもう一度変更をプッシュするgit push some changes again

オプション 3: デプロイメント スクリプトをカスタマイズするOption 3: Customize deployment script

デプロイメント スクリプトをカスタマイズした場合、env フォルダーの削除を強制するように deploy.cmd 内のコードを変更できます。If you've customized the deployment script, you can change the code in deploy.cmd to force it to delete the env folder.

次の手順Next steps

詳細については、 Python デベロッパー センターを参照してください。For more information, see the Python Developer Center.

注意

Azure アカウントにサインアップする前に Azure App Service の使用を開始したい場合は、「Azure App Service アプリケーションの作成」を参照してください。そこでは、App Service で有効期間の短いスターター Web アプリをすぐに作成できます。If you want to get started with Azure App Service before signing up for an Azure account, go to Try App Service, where you can immediately create a short-lived starter web app in App Service. このサービスの利用にあたり、クレジット カードは必要ありません。契約も必要ありません。No credit cards required; no commitments.