Python uv 專案管理完整教學:取代 pip 與 Poetry 的新一代開發工具
為什麼 2026 年你該認識 uv?
如果你在 2024 年以前寫 Python,大概對這套流程不陌生:先裝 pyenv 管理 Python 版本,再用 virtualenv 或 venv 建虛擬環境,然後靠 pip 裝套件,想要鎖版本就得搬出 pip-tools 或 Poetry。光是把開發環境搞定,就得串好幾個工具。
Astral 團隊(對,就是做出 Ruff 那個超快 Python Linter 的團隊)用 Rust 寫了一個叫 uv 的工具,目標很簡單:一個工具搞定所有事。它能取代 pip、pip-tools、pipx、poetry、pyenv、virtualenv,而且速度快到讓人懷疑人生——冷安裝 JupyterLab 只要 2.6 秒,pip 要 21.4 秒,快了將近 10 倍。
如果你還在用傳統的 Python 虛擬環境管理方式,這篇文章會讓你重新思考整個工作流程。
uv 是什麼?核心概念一次看懂
uv 是一個用 Rust 撰寫的 Python 套件與專案管理工具。截至 2026 年 3 月,版本來到 0.10.x,已經非常穩定,社群採用率也在快速成長。它的核心定位是「Python 的 Cargo」——如果你寫過 Rust,就知道 Cargo 有多爽。
uv 能做的事情包括:
- Python 版本管理:不需要 pyenv,uv 自己就能安裝和切換 Python 版本
- 虛擬環境:自動建立與管理,不需要手動 source activate
- 套件安裝:完全相容 pip 的介面,但快 10-100 倍
- 依賴鎖定:內建 universal lockfile,跨平台一致性
- 專案管理:基於 pyproject.toml(PEP 517/518),Cargo 風格的 workspace 支援
- 工具執行:取代 pipx,可以直接跑 CLI 工具
安裝 uv:30 秒搞定
安裝方式非常簡單,官方推薦用 standalone installer:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 或者如果你還有 pip(有點諷刺)
pip install uv
安裝完成後,驗證一下:
uv --version
# uv 0.10.11
用 uv 管理 Python 版本
以前要裝不同版本的 Python,得靠 pyenv 或手動編譯。現在 uv 直接搞定:
# 查看可用的 Python 版本
uv python list
# 安裝特定版本
uv python install 3.12
uv python install 3.11
# 設定專案使用的 Python 版本
uv python pin 3.12
uv 會自動下載預編譯的 Python 發行版,不需要等編譯,幾秒鐘就裝好。
建立新專案:從零開始
這是 uv 最甜的地方。一個指令就能建好完整的專案結構:
# 建立新專案
uv init my-awesome-project
cd my-awesome-project
# 專案結構長這樣:
# my-awesome-project/
# ├── pyproject.toml
# ├── README.md
# └── src/
# └── my_awesome_project/
# └── __init__.py
打開 pyproject.toml,你會看到乾淨的設定檔:
[project]
name = "my-awesome-project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = []
套件管理:加速你的日常開發
新增套件超直覺:
# 加入依賴
uv add fastapi
uv add uvicorn
uv add httpx
# 加入開發依賴
uv add --dev pytest ruff mypy
# 移除套件
uv remove httpx
每次 uv add 都會自動更新 pyproject.toml 和 uv.lock。那個 lockfile 是跨平台的 universal lockfile,意思是不管你在 macOS、Linux 還是 Windows 開發,鎖定的版本都一致。這對團隊協作來說是個大加分。
想要跑你的 FastAPI 專案?直接用 uv run:
# 執行腳本(自動處理虛擬環境)
uv run python main.py
# 執行套件指令
uv run uvicorn app:app --reload
# 執行測試
uv run pytest
uv run 會自動確保虛擬環境存在、依賴都裝好,然後在正確的環境裡執行指令。你不需要手動 activate 任何東西。
pip 使用者無痛遷移
如果你已經有一個用 pip 管理的專案,uv 提供了完全相容的介面:
# 這些指令你應該很熟悉
uv pip install requests
uv pip install -r requirements.txt
uv pip freeze > requirements.txt
uv pip list
就是在前面加上 uv,其他完全一樣。但速度會讓你感受到明顯的差異——特別是在 CI/CD pipeline 裡,安裝依賴從幾分鐘縮短到幾秒鐘,累積下來省的時間非常可觀。
從 Poetry 遷移過來
如果你目前用 Poetry 管理專案,遷移到 uv 其實不難,因為兩者都基於 pyproject.toml:
# 1. 在現有專案目錄執行
uv init --existing
# 2. 同步依賴
uv sync
# 3. 產生 lockfile
uv lock
不過有個重要提醒:Poetry 在 library publishing 的工作流程上仍然有優勢。如果你在維護一個要發布到 PyPI 的 library,Poetry 的 poetry publish 流程比較成熟。uv 的 build 和 publish 功能還在持續完善中。但如果你是寫應用程式(web app、API server、腳本、自動化排程等),uv 幾乎在所有面向都更好。
進階用法:Workspace 與工具執行
uv 支援 Cargo 風格的 workspace,適合 monorepo:
# pyproject.toml
[tool.uv.workspace]
members = ["packages/*"]
另外,取代 pipx 來執行一次性的 CLI 工具也很方便:
# 不需要安裝,直接跑
uv tool run ruff check .
uv tool run black .
uv tool run jupyter lab
# 縮寫
uvx ruff check .
這在你想快速用某個工具但不想污染全域環境時特別實用。寫 Python 裝飾器的時候想跑個 linter 檢查?uvx ruff check . 就搞定。
實際效能比較
數字說話。以下是冷安裝(沒有快取)的實測比較:
| 操作 | pip | uv | 加速倍數 |
|---|---|---|---|
| 安裝 JupyterLab | 21.4s | 2.6s | ~8x |
| 安裝 Django + 依賴 | 8.2s | 0.4s | ~20x |
| 重新安裝(有快取) | 5.1s | 0.05s | ~100x |
有快取的情況下差距更誇張,因為 uv 用了非常激進的快取策略和硬連結,幾乎是瞬間完成。
2026 年的建議:什麼時候用 uv?
簡單總結一下我的建議:
- 新專案:直接用 uv,沒有懸念
- 現有 pip 專案:遷移成本很低,建議遷移
- 現有 Poetry 專案(應用程式):值得遷移,速度提升明顯
- 現有 Poetry 專案(PyPI library):可以先觀望,等 uv 的 publish 流程更完善
- CI/CD 環境:強烈建議換 uv,安裝速度的提升直接省錢
如果你是剛開始學 Python 的新手,建議直接從 uv 套件管理器入門開始,跳過 pip 的歷史包袱,用現代工具建立正確的開發習慣。
結語
Python 的套件管理一直是社群的痛點,uv 的出現不是漸進式的改善,而是一次性的跳躍式升級。用 Rust 重寫帶來的效能優勢、統一的工具鏈設計、以及對現有生態系的良好相容性,讓它在 2026 年成為新專案的首選已經沒有太多爭議。
裝個 uv 試試看吧,你的開發體驗會有明顯的改變。
繼續閱讀
Python Type Hints 完全教學:從基礎到 mypy 靜態型別檢查實戰
相關文章
你可能也喜歡
探索其他領域的精選好文