Python uv 教學,最佳專案管理工具(中)
本文介紹 uv 的操作指令,主要介紹日常指令,如果不清楚自己是否該選擇 uv 請看我寫的 Python 專案管理工具比較。
筆者一向不喜歡寫這種純指令的文章,因為網路已經充斥一堆相似文章了沒必要又一篇浪費讀者作者雙方時間,但是本文是全中文第一個完整介紹操作的文章所以沒這問題,本文的重點是 uv run,網路上沒幾篇文章知道這個強大的指令。
套件管理
生產套件管理
https://docs.astral.sh/uv/concepts/projects/dependencies/
此處是有關套件處理相關的常用指令,熟記這些指令之後就可以替換掉 venv/pyenv/poetry/pipx 了。
# 安裝套件並且設定到 pyproject.toml 中
uv add
# 移除套件並且從 pyproject.toml 的設定中移除
uv remove
# 列出所有已經安裝的套件
uv pip list
# 更新 uv.lock,使用uv add時該檔案不會自動更新
# 此檔案是詳細的套件版本鎖定檔案,用於提供可復現的運行環境
# 加上-U可以允許原有的套件更新
uv lock
# 基於 uv.lock 對目前環境中的套件進行同步,包含開發者套件
uv sync
# 同步但忽略開發者套件
uv sync --no-dev
# 在虛擬環境中執行指令
uv run <commands>
# 移除所有套件(只移除環境中的套件不會移除 toml 中的套件)
uv pip freeze > u && uv pip uninstall -r u && rm u
# 升級指定套件或全部升級
uv sync -P <package>
uv sync -U
# 重新驗證套件快取,--fresh 在任何指令下都可使用
uv sync --refresh
開發套件管理
https://docs.astral.sh/uv/concepts/projects/dependencies/#development-dependencies
設定開發套件,此區域的套件不會被構建和發布,使用 --dev <pkg>
新增,還可以用 --group
幫開發套件設定套件群組方便管理。比如說我們需要 pytest 進行單元測試,只需要使用 uv add --dev pytest
把 pytest 新增到 dev 群組中而不會影響生產套件。下方的範例我們新增了 pytest 作為 dev 群組,以及 ruff 作為 lint 的群組。
# 把 pytest 套件新增到 dev 群組,等同於 uv add --group dev pytest
uv add --dev pytest
# 再把 ruff 套件新增到 lint 群組
uv add --group lint ruff
# toml 對應的更新
[dependency-groups]
dev = ["pytest"]
lint = ["ruff"]
可選套件管理
https://docs.astral.sh/uv/concepts/projects/dependencies/#optional-dependencies
幫專案增加可選套件,這用於發佈在 PyPI 時讓用戶決定是否安裝完整的套件功能。
舉例來 說,像是 httpx 的 http2 功能是可選,如果我們想安裝 httpx + http2 要使用 pip install 'httpx[http2]'
才會安裝 http2 這個可選套件
# 在命令行中使用這個指令,新增可選套件 matplotlib 到 plot 群組
uv add matplotlib --optional plot
# toml 中的對應的更新
[project.optional-dependencies]
plot = ["matplotlib>=3.6.3"]
這樣設定之後 matplotlib 就會變成可選套件。