Python 3 ランタイム用の構成ファイルの準備

App Engine スタンダード環境の Python 3 ランタイムでアプリを実行する前に、App Engine で使用する構成ファイルの一部を変更する必要があります。

  • app.yaml。このファイルには、ランタイムやアプリハンドラなど、アプリのコードに関する情報が含まれています。

  • appengine_config.py。Python 2 ランタイムは、このファイルを使用してサードパーティ ライブラリにアクセスし、定数とフック関数の値を提供します。Python 3 ランタイムでは、このファイルは使用されません。

app.yaml の更新

app.yaml 構成ファイル内の一部のフィールドの動作が変更されています。サポートが終了したフィールドを削除し、次の表で説明するように、他のフィールドを更新します。

フィールド 変更の種類 説明
app_engine_apis Python 3 のみに適用 Python 3 用の以前のバンドル サービスにアクセスする場合は、true に設定する必要があります。
api_version
application_readable
builtins
サポートが終了しています Python 3 ランタイムでは適用できません。
threadsafe サポートが終了しています アプリケーションはすべてスレッドセーフであると推定されます。アプリケーションがスレッドセーフでない場合は、entrypoint を指定して、ワーカーごとに 1 つのスレッドを構成します。

F4 インスタンス クラスを使用する場合の例:
entrypoint: gunicorn -b :$PORT -w 8 --threads 1 main:app

各インスタンス クラスのワーカーの推奨の数については、エントリポイントのおすすめの方法をご覧ください。
ライブラリ サポートが終了しています requirements.txt ファイルを使用して、依存関係の宣言およびクライアント ライブラリのインストールを行います。
handlers: login app_engine_apistrue の場合にサポート Python 3 用の以前のバンドル サービスを使用していない場合、ユーザー管理には Identity and Access Management(IAM)を使用してください。
handlers: script 変更されました Python 2 ランタイムでは、script フィールドを使用して、受信リクエストをアプリのスクリプトにルーティングします。

Python 3 ランタイムでは、script フィールドを使用する代わりに、アプリ内ルーティング(Flask や Django など)でウェブ フレームワークを使用する必要があります。

app.yaml ファイルを Python 3 ランタイムに移行するには、ファイルに静的ハンドラとスクリプト ハンドラが含まれているかどうかに応じて、次のいずれかの操作を行います。

  • app.yaml ファイルに静的ハンドラが含まれている場合は、次のいずれかの操作を行って、動的コンテンツに対するリクエストがアプリのスクリプトに確実にルーティングされるようにします。
    • すべての script フィールドを削除します。次に、entrypoint フィールドを追加して、アプリを実行するウェブサーバーを起動します。いずれの静的ハンドラとも一致しないリクエストは、entrypoint フィールドに指定したウェブサーバーに転送されます。ウェブサーバーとアプリのウェブ フレームワークがリクエストを正しいスクリプトにルーティングします。
    • すべての script フィールドの値を auto に置き換えます。App Engine はウェブサーバーでアプリを自動的に実行します(アプリがいくつかの要件を見てしている必要があります)。スクリプト ハンドラに一致するリクエストはすべてウェブサーバーに転送されます。ウェブサーバーとアプリのウェブ フレームワークがリクエストを正しいスクリプトにルーティングします。
    • app.yaml ファイルに静的ハンドラが含まれていない場合は、script フィールドをすべて削除します。アプリに対するすべてのリクエストは、アプリのウェブサーバーに転送され、アプリのフレームワークがリクエストを適切なスクリプトにルーティングします。必要に応じて、entrypoint フィールドを追加し、デフォルトの起動動作をカスタマイズできます。app.yaml に両方のタイプのハンドラがある場合でも、auto とマークされたすべてのスクリプト ハンドラを削除でき、静的ハンドラと管理者専用ハンドラなど、他のディレクティブを必要とする auto ハンドラはそのまま残ります。

静的ファイル処理はこれまでどおりご利用いただけます。

非推奨のフィールドを使用すると、App Engine はアプリをデプロイするときにエラーを返します。

以下のサンプルを使用して、app.yaml ファイルの違いを比較できます。

Python 2

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /
  script: home.app

- url: /index\.html
  script: home.app

- url: /stylesheets
  static_dir: stylesheets

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$

- url: /admin/.*
  script: admin.app
  login: admin

- url: /.*
  script: not_found.app

Python 3

runtime: python312
app_engine_apis: true

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$

- url: /admin/.*
  script: auto
  login: admin

appengine_config.py の削除

App Engine スタンダード環境の Python 2 ランタイムでは、appengine_config.py ファイルが使用されます。

このファイルは Python 3 ランタイムでは無視されます。その代わりに、Python 3 ランタイムでは、ネイティブ コードを使用する依存関係を含む、依存関係のインストールに標準 requirements.txt ファイルが使用されます。