Python アプリケーションをビルドする

Buildpack は、環境変数によって言語固有の構成をサポートしています。

Python のバージョンを指定する

デフォルトでは、Python Runtime Buildpack は Python インタープリタの最新の安定版を使用します。アプリケーションで特定のバージョンが必要な場合は、アプリケーションのルート ディレクトリに .python-version ファイルを配置してそのバージョンを指定します。

3.13

GOOGLE_PYTHON_VERSION を使用する

GOOGLE_PYTHON_VERSION 環境変数に Python バージョンを指定することもできます。両方が構成されている場合、GOOGLE_PYTHON_VERSION 値が .python-version ファイルよりも優先されます。.python-version ファイルと GOOGLE_PYTHON_VERSION 環境変数のどちらも指定されていない場合、デフォルトでは、最新の LTS バージョンの Python が使用されます。

アプリのデプロイ時に Python 3.13 を使用するように Buildpack を構成するには:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_PYTHON_VERSION="3.13.x"

project.toml プロジェクト記述子を使用して、プロジェクト ファイルとともに環境変数をエンコードすることもできます。環境変数を使用してアプリケーションを構築する手順をご覧ください。

pip で依存関係を指定する

Python Buildpack は、pip を使用したアプリケーションの依存関係の管理をサポートしています。アプリケーションの依存関係は、ルート ディレクトリの requirements.txt ファイルで宣言する必要があります。

requirements.txt ファイルには、パッケージごとに 1 行が含まれています。各行にはパッケージ名が含まれます。パッケージ名以外に、リクエストされたバージョンが含まれている場合もあります。詳細については、requirements.txt のリファレンスをご覧ください。

requirements.txt ファイルの例を次に示します。

requests==2.20.0
numpy

pip を構成する

環境変数を使用して pip の動作を構成できます。

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env PIP_DEFAULT_TIMEOUT='60'

Artifact Registry のプライベート依存関係

Artifact Registry Python リポジトリでは、Python 関数のプライベート依存関係をホストできます。Cloud Build でアプリケーションをビルドすると、Python Buildpack は Cloud Build サービス アカウントに Artifact Registry 認証情報を自動的に生成します。requirements.txt には、追加の認証情報を生成せずに、Artifact Registry URL のみを含める必要があります。例:

--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage

アプリケーション エントリポイント

次のセクションでは、Python ビルドパックのデフォルトのエントリポイントについて説明します。

Cloud Run ソースデプロイにおけるエントリポイント

この機能は、Python ランタイムを使用して Cloud Run にソースコードをデプロイする場合にのみ使用できます。この機能は、Cloud Run ソース デプロイ プロセスの外部で pack build を使用してコンテナ イメージを直接ビルドしている場合は適用されません。

Python ビルドパックは、FastAPIGradioStreamlit などの最新のウェブ フレームワークをサポートしています。

Python バージョン 3.12 以前

Python バージョン 3.12 以前を使用している場合、Python Buildpack はデフォルトで、ワークロードの WSGI HTTP サーバーとして Gunicorn を使用します。Python Buildpack は、デフォルトのエントリポイントを gunicorn -b :8080 main:app に設定します。

Python バージョン 3.13 以降

Python バージョン 3.13 以降では、Python Buildpack は requirements.txt ファイルのウェブサーバーまたはフレームワーク構成に基づいて、Cloud Run ソース デプロイのデフォルト エントリポイントを設定します。このデフォルト設定は、Cloud Run functions ではなく、Cloud Run サービス ソースのデプロイにのみ適用されます。

Python ランタイムを使用してソースから Cloud Run サービスをデプロイする場合、ビルドパックは次の方法で Python バージョンとデフォルトのエントリポイントを決定します。

  • ソースファイルで Python バージョンを指定しない場合、Python Buildpack はデフォルトをサポートされている最新の Python バージョンに設定します。Buildpack は、requirements.txt ファイルで構成したウェブサーバーまたはフレームワークに基づいて、デフォルトのエントリポイントを決定します。

  • requirements.txt ファイルでウェブサーバーまたはフレームワークを指定しない場合、Python Buildpack はデフォルトで Gunicorn をワークロードの WSGI HTTP サーバーとして使用します。Python Buildpack は、デフォルトのエントリポイントを gunicorn -b :8080 main:app に設定します。

  • Python Buildpack は、requirements.txt ファイルで定義されている次の優先順位に基づいて、デフォルトのエントリポイントを設定します。

    1. gunicorn
    2. uvicorn
    3. gradio
    4. streamlit

ウェブサーバーまたはフレームワークを構成する

requirements.txt ファイルに含まれる一般的な Python 構成ごとに、ソースから Cloud Run へデプロイする際のデフォルトのエントリポイントを次の表に示します。

プライマリ構成 デフォルトのエントリポイント 環境変数
gunicorn gunicorn -b :8080 main:app
numpy gunicorn -b :8080 main:app
fastapi
uvicorn
uvicorn main:app --host 0.0.0.0 --port 8080
uvicorn
gunicorn
gunicorn -b :8080 main:app
gradio python main.py GRADIO_SERVER_NAME=0.0.0.0
GRADIO_SERVER_PORT=8080
streamlit streamlit run main.py --server.address 0.0.0.0 --server.port 8080

デプロイの失敗を回避するには、ソースファイルでサポートされている Python バージョンを使用し、requirements.txt ファイルでウェブサーバーを指定します。

または、次のソース デプロイ コマンドを実行して、エントリポイントを指定することもできます。

  gcloud run deploy SERVICE --source .  --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"

次のように置き換えます。

  • SERVICE: デプロイ先のサービスの名前。
  • ENTRYPOINT: ソースコードに使用するデフォルトのエントリポイント。

ソースコードを Cloud Run にデプロイできない場合や、ログにエラーが見つかった場合は、Cloud Run のトラブルシューティング ガイドをご覧ください。

その他すべてのデプロイにおけるエントリポイント

Python Buildpack は、ワークロードのデフォルトの WSGI HTTP サーバーとして Gunicorn を使用します。Python Buildpack でビルドされたアプリは、次を実行した場合と同様に、デフォルト設定で gunicorn プロセスを開始します。

gunicorn --bind :8080 main:app

アプリケーション エントリポイントをカスタマイズする

Procfile または環境変数を使用して、アプリケーションの起動コマンドをカスタマイズできます。これは、デフォルトのエントリポイント構成をカスタマイズするために必要になることがあります。

Procfile を作成するには、ルート ディレクトリのカスタム設定を使用します。例:

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

また、pack コマンドで GOOGLE_ENTRYPOINT 環境変数を使用することもできます。例:

pack build sample-python \
  --builder gcr.io/buildpacks/builder
  --env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"

環境変数

Python Buildpack は、コンテナをカスタマイズするために次の環境変数をサポートしています。

PIP_<key>

pip のドキュメントをご覧ください。

例: PIP_DEFAULT_TIMEOUT=60pip コマンドに --default-timeout=60 を設定します。