Python での依存関係の指定

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

この場合、含められているローカル依存関係(localpackage)から通常どおりコードを使用できます。この方法により、任意の Python パッケージとデプロイをバンドルできます。

プライベート依存関係を使用する

依存関係は、SSH キーにはアクセスできない Cloud Build 環境にインストールされます。前のセクションで説明したように、SSH ベースの認証を必要とするリポジトリ内でホストされているパッケージは、プロジェクトのコードと合わせて組み込み、アップロードする必要があります。

次のように、アプリをデプロイする前に pip install コマンドを -t DIRECTORY フラグを指定して使用することで、プライベート依存関係をローカル ディレクトリにコピーできます。

  1. 依存関係をローカル ディレクトリにコピーします。

    pip install -t DIRECTORY DEPENDENCY
  2. 空の __init__.py ファイルを DIRECTORY ディレクトリに追加してモジュールに変換します。

  3. このモジュールから依存関係をインポートして使用します。

    import DIRECTORY.DEPENDENCY

あらかじめインストールされるパッケージ

次の Python パッケージは、デプロイ時に関数と一緒に自動的にインストールされます。関数のコードでこれらのパッケージのいずれかを使用している場合、次のバージョンを requirements.txt ファイルに含めることをおすすめします。

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 ランタイムでは、実行環境に多数のシステム パッケージが含まれています。リストされていないシステム パッケージが必要な依存関係を関数が使用している場合は、パッケージをリクエストできます。