部署 Python 專案
Zeabur 支援眾多類型的 Python 專案,包含但不限於這些:
如果你的原始碼底下有 app.py
, main.py
等 entrypoint,Zeabur 也會自動啟動。
NPM 支援
如果你的專案根目錄有 package.json
,Zeabur 會自動幫您安裝 Node.js 和 NPM;如果你的 package.json
有 build
script,Zeabur 會自動幫你執行 npm install && npm run build
編譯產物。
如果需要更改編譯的命令(如改執行 npm run build:dist
),請參閱〈自訂編譯與啟動命令〉。
自訂 Entrypoint
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
其中一個。