指定 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 上正常运行。

使用专用依赖项

来自 Artifact Registry 的专用依赖项

Artifact Registry Python 代码库可以为您的 Python 函数托管专用依赖项。部署到 Cloud Functions 时,构建流程将自动为 Cloud Build 服务帐号生成 Artifact Registry 凭据。您只需在 requirements.txt 中添加 Artifact Registry 网址,而不需要生成其他凭据。例如:

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

来自其他代码库的专用依赖项

依赖项安装在 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

click==7.1.2
cloudevents==1.2.0
deprecation==2.1.0
Flask==1.1.2
functions-framework==2.2.1
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
pathtools==0.1.2
watchdog==1.0.2
Werkzeug==1.0.1

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