Skip to content

uv:極速套件與專案管理器

在 Python 世界中,pipvenv 是每位開發者都非常熟悉的工具,分別用於管理套件和虛擬環境。然而,隨著專案規模變大、相依性變得複雜,pip 的解析與安裝速度可能會成為開發流程中的瓶頸。Astral 推出了 uv 套件與專案管理工具。

uv 是一個用 Rust 語言編寫的 Python 套件與專案管理器,它的設計目標是「極速」。uv 不僅是一個套件安裝器,更是一個整合了專案管理、虛擬環境建立、Python 版本管理等多功能的綜合工具鏈。

🤔 什麼是 uv?

uv 是一個整合式的 Python 套件安裝器與解析器。由於它使用 Rust 打造,並運用了先進的快取策略,其速度比 pipconda 快上 10-100 倍。它將多個傳統工具的功能集於一身:

  • 套件管理:可作為 pip 的直接替代品,用於安裝、移除、列出套件。
  • 虛擬環境管理:內建 venv 功能,讓你快速建立與管理虛擬環境。
  • 專案管理:透過 pyproject.toml 管理專案相依性,類似於 PoetryPDM
  • Locking & Syncing:支援 uv.lockrequirements.lock,確保團隊成員與部署環境的相依性完全一致。
  • Python 版本管理:實驗性地支援安裝和管理 Python 版本。

簡單來說,uv 的目標是提供一個更快速、更現代化、更統一的 Python 開發體驗。

🚀 安裝與更新 uv

安裝 uv 非常簡單,你可以透過官方腳本或 pip 來完成。

使用 PowerShell 安裝 (Windows) 這是官方推薦的安裝方式,它會安裝一個獨立的 uv 執行檔。

bash
powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex"

使用 pip 安裝 如果你已經有 Python 環境,也可以直接用 pip 安裝。

bash
pip install uv

更新 uv 更新方式取決於你的安裝方法。

  • 如果是透過官方腳本安裝的,使用 self update 指令:
bash
uv self update
  • 如果是透過 pip 安裝的,則使用 pip 進行更新:
bash
pip install uv -U

🛠️ 建立專案與虛擬環境

uv 讓建立新專案和虛擬環境的流程變得非常流暢。

  1. 初始化專案 使用 uv init 指令來初始化一個新專案。它會為你建立一個 pyproject.toml 檔案,這是現代 Python 專案的標準設定檔。

    bash
    uv init <PROJECT_NAME>
  2. 建立虛擬環境 接著,使用 uv venv 建立虛擬環境。你還可以透過 --python 參數指定要使用的 Python 版本。

    bash
    # 使用預設 Python
    uv venv
    
    # 指定 Python 3.11
    uv venv --python 3.11
  3. 啟動與停用虛擬環境 這一步與傳統的 venv 完全相同。在 Windows 環境下,執行 activate 腳本即可。

    bash
    # 啟動虛擬環境
    .venv\Scripts\activate
    
    # 處理完畢後停用
    deactivate

📦 管理 Python 套件

uv 提供了兩種管理套件的方式:現代化的 uv add 和與 pip 相容的 uv pip

  • uv add <PACKAGE> 這是推薦的管理專案相依性的方式。它會將套件新增到 pyproject.toml 檔案中,然後安裝它。這確保了你的設定檔與實際環境同步。若要移除,則使用 uv remove

    bash
    # 新增一個執行時期相依性
    uv add requests
    
    # 新增一個開發時期相依性
    uv add pytest --dev
  • uv pip install <PACKAGE> 如果你習慣了 pip 的指令,uv 也提供了完全相容的介面,但速度快得多。這類指令不會修改 pyproject.toml,適合快速測試或在腳本中使用。

    bash
    # 安裝套件
    uv pip install <PACKAGE>
    
    # 移除套件
    uv pip uninstall <PACKAGE>
    
    # 列出已安裝的套件
    uv pip list

🔄 更新與同步相依性

為了確保開發環境的可重現性 (reproducibility),uv 引入了 locksync 的概念。

  1. uv lock --upgrade 這個指令會讀取 pyproject.toml 中的相依性規則 (例如 requests>=2.0),然後找出所有符合條件的最新版本,並將它們的精確版本號寫入 uv.lock 檔案。--upgrade 參數會強制更新到最新版本。

    bash
    uv lock --upgrade
  2. uv sync 這個指令是確保你當前虛擬環境與 uv.lock 檔案完全一致的關鍵。它會讀取 uv.lock,並快速安裝、移除或更新套件,使環境狀態與 lockfile 保持同步。這在團隊協作或部署時非常重要。

    bash
    uv sync

🐍 管理 Python 版本

uv 還加入了管理 Python 直譯器的功能。

  • 列出可安裝的 Python 版本

    bash
    uv python list
  • 安裝指定的 Python 版本

    bash
    uv python install <VERSION>

    例如: uv python install 3.12

  • 移除已安裝的 Python 版本

    bash
    uv python uninstall <VERSION>

這個功能讓 uv 成為一個更加全能的工具,讓你可以完全在一個工具內完成從 Python 版本管理到專案開發的所有事情。

📚 參考資料

KF Software House