指定 Python 依赖项

您可通过两种方式为使用 Python 编写的 Cloud Functions 函数指定依赖项:使用 pip 软件包管理器的 requirements.txt 文件,或将本地依赖项与您的函数封装在一起。

目前不支持使用 Pipfile/Pipfile.lock 标准的依赖项规范。您的项目不应包含这些文件。

使用 pip 指定依赖项

Python 依赖项可通过 pip 进行管理,并在元数据文件 requirements.txt 中表示。此文件必须与包含函数代码的 main.py 文件位于同一目录中。

部署您的函数时,Cloud Functions 将使用 pip 下载并安装 requirements.txt 文件中声明的依赖项。

requirements.txt 文件中,每个软件包对应一行内容。每行包含软件包名称和(可选)请求的版本。如需了解详情,请参阅 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 上正常运行。

使用专用依赖项

依赖项安装在 Cloud Build 环境中,该环境不提供对 SSH 密钥的访问权限。如上一部分所述,如果软件包托管在代码库中,并且需要进行基于 SSH 的身份验证,则必须将其与项目代码一同通过 vendoring 方法添加和上传。

您可以先使用带有 -t DIRECTORY 标志的 pip install 命令将专用依赖项复制到本地目录,然后再部署应用,如下所述:

  1. 将依赖项复制到本地目录:

    pip install -t DIRECTORY DEPENDENCY
  2. 将空 __init__.py 文件添加到 DIRECTORY 目录,以将其转换为模块。

  3. 从此模块中导入依赖项以进行使用:

    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

cachetools==4.2.2
certifi==2021.5.30
charset-normalizer==2.0.6
click==7.1.2
cloudevents==1.2.0
deprecation==2.1.0
flask==1.1.2
functions-framework==2.2.1
google-auth==2.2.0
gunicorn==20.0.4
idna==3.2
itsdangerous==1.1.0
jinja2==2.11.2
markupsafe==1.1.1
packaging==21.0
pathtools==0.1.2
pip==21.1.1
pyasn1-modules==0.2.8
pyasn1==0.4.8
pyparsing==2.4.7
requests==2.26.0
rsa==4.7.2
setuptools==58.1.0
urllib3==1.26.7
watchdog==1.0.2
werkzeug==1.0.1

Python 3.9

cachetools==4.2.2
certifi==2021.5.30
charset-normalizer==2.0.6
click==7.1.2
cloudevents==1.2.0
deprecation==2.1.0
flask==1.1.2
functions-framework==2.2.1
google-auth==2.2.0
gunicorn==20.0.4
idna==3.2
itsdangerous==1.1.0
jinja2==2.11.2
markupsafe==1.1.1
packaging==21.0
pathtools==0.1.2
pip==21.1.3
pyasn1-modules==0.2.8
pyasn1==0.4.8
pyparsing==2.4.7
requests==2.26.0
rsa==4.7.2
setuptools==58.1.0
urllib3==1.26.7
watchdog==1.0.2
werkzeug==1.0.1

此外,Python 运行时在执行环境中添加了多个系统软件包。如果您的函数使用的依赖项需要未列出的系统软件包,您可以申请添加软件包