部署 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 模式运行。
设置 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
其中之一。