Python 的套件生態系統長期以來分散在多個工具之間。需要安裝套件?用 pip。需要隔離環境?用 venv 或 virtualenv。需要依賴管理?用 Poetry 或 Pipenv。需要不同 Python 版本?用 pyenv。需要安裝 CLI 工具?用 pipx。uv 將整個工具鏈收納到一個單一的、極速的 Rust 二進位檔中,處理所有 Python 套件工作流程。
由 Astral 創建──也就是 Ruff 檢查器和 Ty 型別檢查器的同一團隊──uv 代表了他們對統一 Python 工具鏈願景的頂峰。uv 用 Rust 編寫並針對速度進行了最佳化,它以一個單一、一致的命令列介面取代了 pip、pipx、poetry、pyenv 和 virtualenv 的功能,執行速度比它所取代的工具快 10 到 100 倍。
對開發者體驗的影響是巨大的。安裝數百個依賴套件──pip 需要幾分鐘來解析和下載──uv 在幾秒鐘內完成。為不同專案建立全新環境幾乎是即時的。而用單一工具管理 Python 版本、虛擬環境和專案依賴的能力,消除了歷來困擾 Python 專案設定的配置開銷。
uv 如何統合 Python 工具鏈?
uv 的架構建立在一個洞察之上:Python 套件工具共享基本操作──下載套件、解析依賴、管理環境──而一個單一的最佳化實作可以勝過一組獨立工具的集合。
graph LR
A[uv CLI] --> B[套件安裝器]
A --> C[依賴解析器]
A --> D[環境管理器]
A --> E[專案管理器]
A --> F[Python 版本管理器]
A --> G[工具安裝器]
B --> H[套件註冊中心\nPyPI / 自訂索引]
C --> H
D --> I[虛擬環境]
E --> J[專案配置]
F --> K[Python 下載]
G --> I
uv 中的每個子命令都對應到一個熟悉的工具:uv pip install 取代 pip,uv venv 取代 virtualenv,uv python install 取代 pyenv,uv tool install 取代 pipx,而 uv init / uv add 取代 poetry 的專案管理。但與這些獨立工具不同,uv 在所有操作之間共享一個共同的快取、解析器和執行引擎。
uv 與傳統 Python 套件工具相比如何?
uv 與傳統工具之間的效能差異在套件管理的每個面向都相當顯著。
| 操作 | pip | Poetry | uv | 加速倍數 |
|---|---|---|---|---|
| 安裝 100 個套件 | 45-90 秒 | 60-120 秒 | 1-3 秒 | 30-50 倍 |
| 解析依賴 | 30-60 秒 | 45-90 秒 | 0.5-2 秒 | 60-100 倍 |
| 建立虛擬環境 | 2-5 秒 | 3-8 秒 | <0.1 秒 | 50 倍以上 |
| 從鎖定檔安裝 | 30-45 秒 | 40-60 秒 | 0.5-1 秒 | 60-80 倍 |
| 安裝單一套件 | 1-3 秒 | 2-5 秒 | <0.1 秒 | 20 倍以上 |
| 鎖定檔生成 | 30-60 秒 | 45-90 秒 | 0.5-2 秒 | 60-100 倍 |
這些基準測試假設暖快取。冷安裝(首次,無快取)仍然比 pip 快 5-10 倍,這得益於並行下載、最佳化的 HTTP 處理和更快的 wheel 建置器。
uv 提供哪些專案管理功能?
除了套件安裝之外,uv 還提供完整的專案管理工作流程,可與 Poetry 和 PDM 媲美。
| 功能 | uv | Poetry | PDM | pip + venv |
|---|---|---|---|---|
| 專案初始化 | uv init | poetry init | pdm init | 手動 |
| 新增依賴 | uv add | poetry add | pdm add | 手動編輯 + pip install |
| 移除依賴 | uv remove | poetry remove | pdm remove | 手動編輯 |
| 鎖定檔 | uv.lock | poetry.lock | pdm.lock | 無 (pip freeze) |
| 版本管理 | uv python install | 需 pyenv | 需 pyenv | 需 pyenv |
| 腳本/任務 | uv run | poetry run | pdm run | 手動 |
| 建置/發布 | uv build、uv publish | poetry build、poetry publish | pdm build、pdm publish | build + twine |
uv 的專案管理設計為直觀易用,無論使用者來自何種背景。uv add requests 既將依賴新增到 pyproject.toml 也安裝它,就像 poetry 一樣。uv sync 從鎖定檔安裝所有依賴。而 uv run 在專案的虛擬環境中執行命令,無需手動啟動。
uv 如何處理 Python 版本管理?
Python 版本管理傳統上由 pyenv 處理,這需要 shell 整合且配置可能很複雜。uv 將版本管理直接內建到工具中。
| 版本管理任務 | uv 命令 | 傳統工具 | 傳統命令 |
|---|---|---|---|
| 列出可用版本 | uv python list | pyenv | pyenv install --list |
| 安裝 Python 版本 | uv python install 3.12 | pyenv | pyenv install 3.12 |
| 設定專案 Python 版本 | uv python pin 3.12 | pyenv | pyenv local 3.12 |
| 尋找當前 Python | uv python find | which/where | which python |
| 使用特定 Python | uv run --python 3.11 | pyenv | pyenv shell 3.11 |
uv 從 Astral Python Build Standalone 專案下載預建置的 Python 二進位檔,該專案為所有主要平台提供最佳化的 Python 建置。這消除了從原始碼編譯 Python 的需求(如 pyenv 的預設方式),並大大加快了 Python 版本管理的速度。
FAQ
什麼是 uv? uv 是 Astral 用 Rust 編寫的極速 Python 套件與專案管理器。它將 pip、pipx、poetry、pyenv 和 virtualenv 的功能統一到一個工具中,效能快 10-100 倍。
uv 如何達到如此快的速度? uv 使用 Rust 編寫,採用積極的快取、並行下載和最佳化的依賴解析。它並行下載套件、廣泛地磁碟快取,並使用 SAT 求解器進行依賴解析。
uv 能完全取代 pip 嗎? 可以,uv 設計為 pip 的直接替代品。它支援 pip 的命令列介面、需求檔案、可編輯安裝和所有標準 pip 工作流程,但執行速度快 10-100 倍。
uv 支援虛擬環境管理嗎? 是的,uv 提供類似 virtualenv 和 pyenv 的內建虛擬環境管理。它可以建立、啟用和管理不同 Python 版本和依賴集的環境。
uv 適合生產環境的 CI/CD 嗎? 是的,uv 特別為 CI/CD 環境設計。其速度、確定性解析和內建快取使其成為自動化建置管線的理想選擇,在這種環境下每一秒都很重要。
延伸閱讀
- uv GitHub 倉庫 – 原始碼、文件和問題追蹤器
- Astral (Ruff) – uv、Ruff 和 Ty 背後的公司
- Python 套件使用者指南 – 官方 Python 套件文件
- PEP 621 – 在 pyproject.toml 中儲存專案元資料 – uv 用於專案配置的標準
- Python Build Standalone – uv 下載的預建置 Python 發行版
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!