Python で記述された Cloud Functions の依存関係を指定するには、2 つの方法があります。1 つは pip パッケージ マネージャーの requirements.txt
ファイルを使用する方法、もう 1 つは関数と一緒にローカル依存関係をパッケージ化する方法です。
pip を使用して依存関係を指定する
Python における依存関係は pip で管理され、requirements.txt
というメタデータ ファイルで表現されます。このファイルは、関数のコードを含む main.py
ファイルと同じディレクトリに置く必要があります。
関数をデプロイすると、Cloud Functions は pip を使用して、requirements.txt
ファイル内で宣言されている依存関係をダウンロードしてインストールします。
requirements.txt
ファイルには、パッケージごとに 1 行が含まれています。各行にはパッケージ名が含まれます。パッケージ名以外に、リクエストされたバージョンが含まれている場合もあります。詳細については、requirements.txt
のリファレンスをご覧ください。
requirements.txt
ファイルの例を次に示します。
requests==2.20.0 numpy
ローカル依存関係をパッケージ化する
依存関係を関数とまとめてパッケージ化してデプロイすることもできます。この方法は、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 で正しく実行されない場合があります。
プライベート依存関係を使用する
依存関係は、SSH キーにはアクセスできない Cloud Build 環境にインストールされます。前のセクションで説明したように、SSH ベースの認証を必要とするリポジトリ内でホストされているパッケージは、プロジェクトのコードと合わせて組み込み、アップロードする必要があります。
次のように、アプリをデプロイする前に pip install
コマンドを -t DIRECTORY
フラグを指定して使用することで、プライベート依存関係をローカル ディレクトリにコピーできます。
依存関係をローカル ディレクトリにコピーします。
pip install -t DIRECTORY DEPENDENCY
空の
__init__.py
ファイルをDIRECTORY
ディレクトリに追加してモジュールに変換します。このモジュールから依存関係をインポートして使用します。
import DIRECTORY.DEPENDENCY
あらかじめインストールされるパッケージ
次の Python パッケージは、デプロイ時に関数と一緒に自動的にインストールされます。関数のコードでこれらのパッケージのいずれかを使用している場合、次のバージョンを requirements.txt
ファイルに含めることをおすすめします。
Python 3.7
aiohttp==3.6.2 async-timeout==3.0.1 attrs==19.3.0 cachetools==4.1.1 certifi==2020.6.20 chardet==3.0.4 click==7.1.2 Flask==1.1.2 google-api-core==1.21.0 google-api-python-client==1.10.0 google-auth==1.19.2 google-auth-httplib2==0.0.4 google-cloud-core==1.3.0 google-cloud-trace==0.23.0 googleapis-common-protos==1.52.0 grpcio==1.30.0 httplib2==0.18.1 idna==2.9 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 multidict==4.7.6 opencensus==0.7.9 opencensus-context==0.1.1 pip==20.1.1 protobuf==3.12.2 pyasn1==0.4.8 pyasn1-modules==0.2.8 pytz==2020.1 PyYAML==5.3.1 requests==2.24.0 rsa==4.6 setuptools==47.3.1 six==1.15.0 uritemplate==3.0.1 urllib3==1.25.9 Werkzeug==1.0.1 wheel==0.34.2 wrapt==1.12.1 yarl==1.5.1
Python 3.8
また、Python ランタイムでは、実行環境に多数のシステム パッケージが含まれています。リストされていないシステム パッケージが必要な依存関係を関数が使用している場合は、パッケージをリクエストできます。