部署 Python 项目
Zeabur 支持多种类型的 Python 项目,包括但不限于以下:
如果您的源代码中有 app.py
、main.py
等入口文件,Zeabur 也将自动启动。
NPM 支持
如果你的项目根目录有 package.json
,Zeabur 会自动帮您安装 Node.js 和 NPM;如果你的 package.json
有 build
脚本,Zeabur 会自动帮你运行 npm install && npm run build
编译产物。
如果需要更改编译的命令(如改运行 npm run build:dist
),请参阅〈自定义编译与启动命令〉。
自定义入口文件
Zeabur 默认会识别 main.py
、app.py
、manage.py
、server.py
、app/__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 查阅)。如果你有自定义 start_command
,_startup
必须在你的启动命令中运行,否则不会启动 Python 应用。
build_command
和 start_command
均会使用 POSIX 兼容的 shell 运行,所以你可以使用 &&
串接多个命令,或者使用 ;
分隔多个命令。
网页爬取
Playwright 支持
如果你的依赖清单(requirements.txt
、Pipfile
、pyproject.toml
⋯⋯)有声明 playwright
,Zeabur 会自动帮您准备好运行 Playwright 必要的环境。
注意 Playwright 应以 Headless 模式运行,通常默认就是如此。
Selenium 支持
如果你的依赖清单(requirements.txt
、Pipfile
、pyproject.toml
⋯⋯)有声明 seleniumbase
或 selenium
,Zeabur 会自动帮您准备好运行 Selenium 必要的环境。
注意 Selenium 应以 Headless 模式运行。
Serverless
Zeabur 支持将 Python 项目部署为 serverless 项目。但是目前需要 opt-in。 请参考 启用 Serverless 页面启用 serverless 支持。
设置 Python 版本
Zeabur 默认使用 Python 3.10 作为运行环境,不过 Zeabur 会根据你项目设置的 Python 版本选择运行环境,你也可以根据需要自定义运行环境。
在项目中指定 Python 版本
“在项目中指定 Python 版本”是比较通用的做法,在每个环境都能使用。
如果是 Pipenv,请在 Pipfile
中指定 Python 版本:
[requires]
python_version = "3.8" # 在这里指定 Python 版本
如果是 Poetry,请在 pyproject.toml
中指定 Python 版本:
[tool.poetry.dependencies]
python = "^3.8" # 在这里指定 Python 版本
如果是 PDM,请在 pyproject.toml
中指定 requires-python
:
[project]
requires-python = ">= 3.8" # 在这里指定 Python 版本
如果是 Rye,则使用 rye pin
命令设置 Python 版本:
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.py
、main.py
和 streamlit_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
自定义包管理器
Zeabur 支持多种 Python 包管理器:
Zeabur 会根据项目结构选择最适合的包管理器。如果你没有提交包管理的 lockfile,且无法从项目结构中明显判断出该项目使用的包管理器,那么 Zeabur 将不会安装任何包。此时,你可以选择在 zbpack.json
中指定包管理器:
{
"python": {
"package_manager": "pipenv"
}
}
或者通过环境变量 ZBPACK_PYTHON_PACKAGE_MANAGER
指定包管理器:
ZBPACK_PYTHON_PACKAGE_MANAGER=pipenv
值可以是 pip
, pipenv
, poetry
, pdm
, rye
, uv
其中之一。