构建 Python 应用

Buildpack 通过环境变量支持语言惯用配置。

指定 Python 版本

默认情况下,Python 运行时 Buildpack 使用最新的稳定版 Python 解释器。如果您的应用需要使用特定版本,您可以通过在应用的根目录中添加 .python-version 文件来指定版本。

3.13

使用 GOOGLE_PYTHON_VERSION

还可以通过 GOOGLE_PYTHON_VERSION 环境变量指定 Python 版本。如果同时设置了这两个配置,则 GOOGLE_PYTHON_VERSION 值优先于 .python-version 文件。默认情况下,如果未指定 .python-version 文件和 GOOGLE_PYTHON_VERSION 环境变量,则使用最新的 LTS 版本的 Python。

要在部署应用时将 Buildpack 配置为使用 Python 3.13,请运行以下命令:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_PYTHON_VERSION="3.13.x"

您还可以使用 project.toml 项目描述符对环境变量以及项目文件进行编码。请参阅使用环境变量构建应用中的说明。

使用 pip 指定依赖项

Python Buildpack 支持使用 pip 管理应用依赖项。您的应用依赖项应在 requirements.txt 文件的根目录中声明。

requirements.txt 文件中,每个软件包对应一行内容。每行包含软件包名称和(可选)请求的版本。如需了解详情,请参阅 requirements.txt 参考

下面是一个 requirements.txt 文件示例:

requests==2.20.0
numpy

配置 pip

您可以使用环境变量配置 pip 的行为:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env PIP_DEFAULT_TIMEOUT='60'

来自 Artifact Registry 的专用依赖项

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

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

应用入口点

以下部分介绍了 Python buildpack 的默认入口点。

Cloud Run 源代码部署的入口点

只有在您使用 Python 运行时将源代码部署到 Cloud Run 时,此功能才可用。如果您在 Cloud Run 源代码部署流程之外直接使用 pack build 构建容器映像,则此功能不适用。

Python buildpack 支持 FastAPIGradioStreamlit 等现代 Web 框架。

Python 3.12 版及更低版本

如果您使用的是 Python 3.12 版及更低版本,则 Python Buildpack 默认使用 Gunicorn 作为工作负载的 WSGI HTTP 服务器。Python Buildpack 会将默认入口点设置为 gunicorn -b :8080 main:app

Python 3.13 版及更高版本

对于 Python 3.13 版及更高版本,Python Buildpack 会根据 requirements.txt 文件中的 Web 服务器或框架配置,为 Cloud Run 源代码部署设置默认入口点。此默认设置仅适用于 Cloud Run 服务源代码部署,而不适用于 Cloud Run 函数。

当您使用 Python 运行时从源代码部署 Cloud Run 服务时,buildpack 会通过以下方式确定 Python 版本和默认入口点:

  • 如果您未在源代码文件中指定 Python 版本,则 Python buildpack 会将默认版本设置为最新受支持的 Python 版本。Buildpack 会根据您requirements.txt 文件中配置的Web 服务器或框架来确定默认入口点。

  • 如果您未在 requirements.txt 文件中指定 Web 服务器或框架,则 Python buildpack 默认使用 Gunicorn 作为工作负载的 WSGI HTTP 服务器。Python Buildpack 会将默认入口点设置为 gunicorn -b :8080 main:app

  • Python Buildpack 会根据 requirements.txt 文件中定义的以下优先级顺序设置默认入口点:

    1. gunicorn
    2. uvicorn
    3. gradio
    4. streamlit

配置 Web 服务器或框架

对于 requirements.txt 文件中的每种常见 Python 配置,下表显示了从源代码部署到 Cloud Run 时的默认入口点:

主要配置 默认入口点 环境变量
gunicorn gunicorn -b :8080 main:app
numpy gunicorn -b :8080 main:app
fastapi
uvicorn
uvicorn main:app --host 0.0.0.0 --port 8080
uvicorn
gunicorn
gunicorn -b :8080 main:app
gradio python main.py GRADIO_SERVER_NAME=0.0.0.0
GRADIO_SERVER_PORT=8080
streamlit streamlit run main.py --server.address 0.0.0.0 --server.port 8080

为避免部署失败,请在源代码文件中使用受支持的 Python 版本,并在 requirements.txt 文件中指定 Web 服务器。

或者,您也可以通过运行以下源代码部署命令来指定入口点:

  gcloud run deploy SERVICE --source .  --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"

替换以下内容:

  • SERVICE:您要部署到的服务的名称。
  • ENTRYPOINT:您要用于源代码的默认入口点。

如果您无法将源代码部署到 Cloud Run 或在日志中发现错误,请参阅 Cloud Run 问题排查指南

所有其他部署的入口点

Python Buildpack 会将 Gunicorn 用作工作负载的默认 WSGI HTTP 服务器。使用 Python Buildpack 构建的应用会使用默认设置启动 gunicorn 进程,类似于运行以下命令:

gunicorn --bind :8080 main:app

自定义应用入口点

您可以使用 Procfile 或环境变量自定义应用的启动命令。您可能需要这样做来自定义默认入口点配置

您可以使用自定义设置在根目录中创建 Procfile。示例:

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

或者,您也可以将 GOOGLE_ENTRYPOINT 环境变量与 pack 命令搭配使用。示例:

pack build sample-python \
  --builder gcr.io/buildpacks/builder
  --env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"

环境变量

Python Buildpack 支持使用以下环境变量来自定义容器

PIP_<key>

请参阅 pip 文档

示例:PIP_DEFAULT_TIMEOUT=60pip 命令设置 --default-timeout=60