uv 一個工具管掉 Python 版本、虛擬環境與依賴

uv 是 Astral 用 Rust 寫的 Python 工具鏈,宣稱安裝速度比 pip 快上百倍。但真正的價值不只是快——它把原本分散在 pyenv(版本)、venv(環境)、pip(套件)、pipx(一次性工具)的職責收進同一個 CLI。

三件事同一個入口

# Python 版本
uv python install 3.12 3.13   # 安裝指定版本
uv python list                # 查看已安裝版本
uv python pin 3.12            # 為當前專案釘住版本
uv python pin 3.12 --global   # 釘住全域預設版本
 
# 專案與依賴
uv init                       # 建立新專案
uv add pandas numpy           # 新增依賴
uv add --dev pytest ruff      # 新增開發用依賴(不進正式環境)
uv sync                       # 依 lock file 把環境同步成一致狀態
 
# 執行
uv run python main.py         # 在專案的虛擬環境內執行
uv run pytest

心智模型:不用手動 activate

uv run 會自己找到並使用專案的虛擬環境,所以那套「先 source .venv/bin/activate 再跑指令」的儀式消失了。環境的真相來自專案裡的 lock file,uv sync 負責讓實際環境對齊它——不是靠人記得裝過什麼。

uv python pin 產生的版本宣告同理:Python 版本變成專案設定的一部分,而不是機器上的全域狀態。

一次性工具則不進專案依賴 → uvx 讓工具用完即丟,不進專案依賴

相關:Pip