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 支持 FastAPI、Gradio 和 Streamlit 等现代 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
文件中定义的以下优先级顺序设置默认入口点:gunicorn
uvicorn
gradio
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=60
为 pip
命令设置 --default-timeout=60
。