地表最快的 Python 管理工具 uv!PDM、pipx 的功能一手包辦
uv 是一款用 Rust 編寫的 CLI 工具,讓你以現代化的方式管理 Python 專案/虛擬環境/CLI Tools!
續上篇
繼上次的文章 後,目前我已經全面改用 uv 進行 Python 的專案管理。
那麼為什麼會從 PDM + uv 的組合改為只使用 uv 呢?
- uv 的速度極快:uv 是由開發 Ruff 的同一個團隊 Astral 使用 Rust 語言開發的 Python 管理工具。性能跟 pip 比起來可達 10 倍 ~ 100 倍!
- uv 整合了多個工具的功能:
uv
:Python 套件及虛擬環境管理,功能與 PDM/Poetry 相似。uv tool
:功能與 pipx 相似,可以為每一個 CLI 工具開一個獨立的虛擬環境並安裝。
- 使用方便:使用 uv 時不用像 pdm 要先
pdm python install
安裝好要使用的 Python,而是直接在初始化專案時uv init --python 3.13.2
指定版本,之後安裝套件前就會自動抓取電腦中的 Python 並建立虛擬環境,若沒有則自動安裝。
Python 專案管理工具比較
名稱 | 特色 | 缺點 |
---|---|---|
conda | 特別支援許多數據科學的工具、不只支援 Python、能處理原本需要手動安裝到系統的二進制工具 | 必須要先 conda active 把虛擬環境打開、虛擬環境跟專案預設存在不同地方、檔案較大、與 pip 共用有時會出問題 |
pdm | 功能完善、用於專案與虛擬環境、套件管理、build | 以 Python 編寫,速度較 uv 緩慢 |
pyenv | 專注於管理不同版本的 Python | 不處理套件管理,通常需要配合 pip 使用、Windows 平台支援度不如 Linux/macOS |
virtualenv | 輕量級虛擬環境 | 僅處理環境隔離,不處理套件管理、需要手動啟動環境 |
pipx | 專門管理 Python CLI 工具,為每個工具單獨創一個虛擬環境管理 | 僅適合管理 CLI 工具,不適合專案管理 |
uv | 不僅支援專案、虛擬環境管理、還包含了 uv tool 套件管理工具(功能像 pipx)、跨平台支援 | 專案較新,可能不如老牌工具完善,還有發展空間 |
uv 介紹
uv 就像 PDM 一樣,是個現代化的 Python 專案管理器,他可以讓我們更方便的建立、管理、與使用虛擬環境。
與 PDM 不同的是,當你輸入 uv init
就會直接初始化專案,不會有問答環節。我們可以使用參數設定專案的細節:
|
|
接著就會創一個 my_project
資料夾,並且在 pyproject.toml 中設定指定的 Python 版本。
(你也可以不輸入專案名稱,例如 uv init --python 3.13.2
就會直接在當下的資料夾初始化專案,而不另外創資料夾。)
一些其他常用的指令:
uv init
初始化專案uv add <package>
安裝套件uv remove <package>
移除套件uv run <command>
使用當前專案的環境執行命令
uv 在 remove 套件時,也會同步把虛擬環境中不再需要使用的依賴套件移除!不像
pip
,在pip uninstall
時只會移除指定的套件本身,相關的依賴套件還是會留在虛擬環境中。
更厲害的是,uv 還結合了類似 pipx 的功能,我們可以透過 uv tool
指令來使用:
uv tool install <tool>
安裝工具,比如安裝 Ruff 可以輸入uv tool install ruff
uv tool uninstall <tool>
解除安裝工具uv tool run <tool>
使用uv tool
安裝的工具,比如uv tool run ruff
可以執行安裝好的 ruff 工具
因為
uv tool run
有點太長了,所以官方有一個 aliasuvx
!你可以用uvx ruff
代表uv tool run ruff
。
自製專案模板
在 Python 專案開發中,我通常會用到以下的一些工具:
我把 ruff 及 mypy 相關的設定寫在 ruff.toml
及 mypy.ini
中,以便日後專案開發使用。有興趣的可以前往 Python Project Template
查看!
模板使用說明
- 在電腦中安裝 uv
- 在 VSCode/Cursor 中安裝 Python、Pylance、Jupyter、Ruff、Mypy (By Matan Gover) 等套件
- 將模板 Clone 到想開發的地方
- 在專案根目錄執行
uv init
初始化專案並且選擇需要的 Python 版本 - 快樂開發
結語
自從用了 uv 之後,許多的 Python 工具都不需要安裝了!而且速度又快,真的是很符合我的喜好。希望這篇文章可以幫到有需要的人!