地表最快的 Python 管理工具 uv!PDM、pipx 的功能一手包辦

目錄

uv 是一款用 Rust 編寫的 CLI 工具,讓你以現代化的方式管理 Python 專案/虛擬環境/CLI Tools!

上次的文章 後,目前我已經全面改用 uv 進行 Python 的專案管理。

那麼為什麼會從 PDM + uv 的組合改為只使用 uv 呢?

  1. uv 的速度極快:uv 是由開發 Ruff 的同一個團隊 Astral 使用 Rust 語言開發的 Python 管理工具。性能跟 pip 比起來可達 10 倍 ~ 100 倍!
  2. uv 整合了多個工具的功能:
    • uv:Python 套件及虛擬環境管理,功能與 PDM/Poetry 相似。
    • uv tool:功能與 pipx 相似,可以為每一個 CLI 工具開一個獨立的虛擬環境並安裝。
  3. 使用方便:使用 uv 時不用像 pdm 要先 pdm python install 安裝好要使用的 Python,而是直接在初始化專案時 uv init --python 3.13.2 指定版本,之後安裝套件前就會自動抓取電腦中的 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 就像 PDM 一樣,是個現代化的 Python 專案管理器,他可以讓我們更方便的建立、管理、與使用虛擬環境。

與 PDM 不同的是,當你輸入 uv init 就會直接初始化專案,不會有問答環節。我們可以使用參數設定專案的細節:

1
uv init my_project --python 3.13.2

接著就會創一個 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 有點太長了,所以官方有一個 alias uvx!你可以用 uvx ruff 代表 uv tool run ruff

在 Python 專案開發中,我通常會用到以下的一些工具:

  • uv :套件管理
  • ruff :同樣由 Astral 開發的靜態程式檢查工具
  • mypy :型別檢查

我把 ruff 及 mypy 相關的設定寫在 ruff.tomlmypy.ini 中,以便日後專案開發使用。有興趣的可以前往 Python Project Template 查看!

  1. 在電腦中安裝 uv
  2. 在 VSCode/Cursor 中安裝 Python、Pylance、Jupyter、Ruff、Mypy (By Matan Gover) 等套件
  3. 將模板 Clone 到想開發的地方
  4. 在專案根目錄執行 uv init 初始化專案並且選擇需要的 Python 版本
  5. 快樂開發

自從用了 uv 之後,許多的 Python 工具都不需要安裝了!而且速度又快,真的是很符合我的喜好。希望這篇文章可以幫到有需要的人!