依存関係の扱い


Python で記述された Cloud Functions の依存関係を指定するには、2 つの方法があります。1 つは pip パッケージ マネージャーの requirements.txt ファイルを使用する方法、もう 1 つは関数と一緒にローカル依存関係をパッケージ化する方法です。

現在、Pipfile / Pipfile.lock 標準を使用した依存関係の指定はサポートされていません。プロジェクトにこれらのファイルが含まれないようにする必要があります。

pip を使用して依存関係を指定する

Python における依存関係は pip で管理され、requirements.txt というメタデータ ファイルで表現されます。このファイルは、関数のコードを含む main.py ファイルと同じディレクトリに置く必要があります。

関数をデプロイまたは再デプロイすると、Cloud Functions は pip を使用して、requirements.txt ファイルに宣言されている最新バージョンの依存関係をダウンロードしてインストールします。requirements.txt ファイルには、パッケージごとに 1 行が含まれています。各行にはパッケージ名が含まれます。パッケージ名以外に、リクエストされたバージョンが含まれている場合もあります。詳細については、requirements.txt のリファレンスをご覧ください。

依存関係のバージョンの変更によってビルドが影響を受けないようにするには、依存関係パッケージを特定のバージョンに固定することを検討します。

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

functions-framework
requests==2.20.0
numpy

Functions Framework は、すべての関数に必須の依存関係です。Cloud Functions は、関数の作成時にユーザーの代理でこの依存関係をインストールしますが、明確化のため明示的な依存関係として含めておくことをおすすめします。

関数がプライベート依存関係を利用している場合は、functions-framework をプライベート レジストリにミラーリングすることをおすすめします。ミラーリング対象の functions-framework を依存関係として関数に含めることで、公共のインターネットからパッケージがインストールされないようにします。

ローカル依存関係をパッケージ化する

依存関係を関数とまとめてパッケージ化してデプロイすることもできます。この方法は、pip パッケージ マネージャーで依存関係を利用できない場合や、Cloud Functions 環境のインターネット アクセスが制限されている場合に便利です。

たとえば、次のようなディレクトリ構造を使用するとします。

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

この場合、次の import ステートメントを使用して、通常どおり localpackage からコードをインポートできます。

# Code in main.py
from localpackage import script

このアプローチでは、いずれの setup.py ファイルも実行されません。このようなファイルを含むパッケージもバンドルできますが、Cloud Functions で正しく実行されない場合があります。