教程
Python

部署 Python 项目

Zeabur 支持多种类型的 Python 项目,包括但不限于以下:

如果您的源代码中有 app.pymain.py 等入口文件,Zeabur 也将自动启动。

NPM 支持

如果你的项目根目录有 package.json,Zeabur 会自动帮您安装 Node.js 和 NPM;如果你的 package.jsonbuild 脚本,Zeabur 会自动帮你运行 npm install && npm run build 编译产物。

如果需要更改编译的命令(如改运行 npm run build:dist),请参阅〈自定义编译与启动命令〉。

自定义入口文件

Zeabur 默认会识别 main.pyapp.pymanage.pyserver.pyapp/__init__.py 这些 Entrypoint,但如果你的 Entrypoint 不在上面列出的清单中,可以设置环境变量

ZBPACK_PYTHON_ENTRY=your-entrypoint.py

或者是在 zbpack.json 中加入以下设置:

{
    "python": {
        "entry": "your-entrypoint.py"
    }
}

这样 Zeabur 就会以 your-entrypoint.py 作为 Python 的运行文件。

如果你想部署 WSGI/ASGI 应用程序(比如 Django、Flask、FastAPI),且 entrypoint 是在 __init__.py 里面,则必须写出完整路径(包含 __init__.py 在内):

# server/__init__.py
 
app = Flask(__name__)
ZBPACK_PYTHON_ENTRY=server/__init__.py

如果你的 entrypoint 在 __main__.py,亦需要写出完整路径:

# server/__main__.py
 
print("Hello!")
ZBPACK_PYTHON_ENTRY=server/__main__.py

自定义编译和启动命令

Zeabur 允许你使用环境变量或配置文件自定义 Python 的编译和启动命令。

“编译命令”适合用在需要下载或编译自定义产物(如 CSS、JavaScript 等等),或者是写入配置文件的情境。举例来说,你想往 /etc 文件夹写入配置文件,你可以设置环境变量

ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere

或者是在 zbpack.json 中加入以下设置:

{
    "build_command": "echo 'your-configuration' > /etc/somewhere"
}

你亦可以在这里运行 npm 的命令。注意 Zeabur 只会在 项目根目录package.json 的情况下安装 Node.js 和 NPM,如果你的项目没有 package.json,则不会有 npm 命令可用:

{
    "build_command": "npm install && npm run build:dist"
}

“启动命令”则适合用在启动 Python 应用时运行的情境,如在原有的命令基础上加上 python3 migrate.py 来建立数据库的 tables。举例来说,你可以设置环境变量

ZBPACK_START_COMMAND="python3 migrate.py && _startup"

或者是在 zbpack.json 中加入以下设置:

{
    "start_command": "python3 migrate.py && _startup"
}

其中 _startup 是 Zeabur 原本的启动命令(可以在 zbpack 查阅 (opens in a new tab))。如果你有自定义 start_command_startup 必须在你的启动命令中运行,否则不会启动 Python 应用。

build_commandstart_command 均会使用 POSIX 兼容的 shell 运行,所以你可以使用 && 串接多个命令,或者使用 ; 分隔多个命令。

网页爬取

Playwright 支持

如果你的依赖清单(requirements.txtPipfilepyproject.toml⋯⋯)有声明 playwright,Zeabur 会自动帮您准备好运行 Playwright 必要的环境。

注意 Playwright 应以 Headless 模式运行 (opens in a new tab),通常默认就是如此。

Selenium 支持

如果你的依赖清单(requirements.txtPipfilepyproject.toml⋯⋯)有声明 seleniumbaseselenium,Zeabur 会自动帮您准备好运行 Selenium 必要的环境。

注意 Selenium 应以 Headless 模式运行 (opens in a new tab)

Serverless

Zeabur 支持将 Python 项目部署为 serverless 项目。但是目前需要 opt-in。 请参考 启用 Serverless 页面启用 serverless 支持。

设置 Python 版本

Zeabur 默认使用 Python 3.10 作为运行环境,不过 Zeabur 会根据你项目设置的 Python 版本选择运行环境,你也可以根据需要自定义运行环境。

在项目中指定 Python 版本

“在项目中指定 Python 版本”是比较通用的做法,在每个环境都能使用。

如果是 Pipenv请在 Pipfile 中指定 Python 版本 (opens in a new tab)

[requires]
python_version = "3.8"   # 在这里指定 Python 版本

如果是 Poetry请在 pyproject.toml 中指定 Python 版本 (opens in a new tab)

[tool.poetry.dependencies]
python = "^3.8"  # 在这里指定 Python 版本

如果是 PDM请在 pyproject.toml 中指定 requires-python (opens in a new tab)

[project]
requires-python = ">= 3.8"  # 在这里指定 Python 版本

如果是 Rye,则使用 rye pin 命令设置 Python 版本 (opens in a new tab)

rye pin 3.8  # 在这里指定 Python 版本

在 Zeabur 中指定 Python 版本

如果你使用的是传统的 requirements.txt,或你需要在 Zeabur 覆盖项目指定的 Python 版本,你可以在 zbpack.json 中指定 Python 版本。

{
    "python": {
        "version": "3.8"
    }
}

或者使用 ZBPACK_PYTHON_VERSION 环境变量指定 Python 版本:

ZBPACK_PYTHON_VERSION=3.8

指定 Streamlit 启动文件

如果你有安装 streamlit 依赖,且文件名是 app.pymain.pystreamlit_app.py,Zeabur 默认会以 Streamlit 模式启动你的应用程序。

不过假如文件名不是上面这三个,你可以在 zbpack.json 中指定文件名。比如你的 Streamlit 应用程序的文件名是 myapp.py

{
    "streamlit": {
        "entry": "myapp.py"
    }
}

这样 Zeabur 就会以 Streamlit 模式启动你的 myapp.py。你也可以使用环境变量 ZBPACK_STREAMLIT_ENTRY 指定文件名:

ZBPACK_STREAMLIT_ENTRY=myapp.py