uv:極速套件與專案管理器
在 Python 世界中,pip
和 venv
是每位開發者都非常熟悉的工具,分別用於管理套件和虛擬環境。然而,隨著專案規模變大、相依性變得複雜,pip
的解析與安裝速度可能會成為開發流程中的瓶頸。Astral 推出了 uv
套件與專案管理工具。
uv
是一個用 Rust 語言編寫的 Python 套件與專案管理器,它的設計目標是「極速」。uv
不僅是一個套件安裝器,更是一個整合了專案管理、虛擬環境建立、Python 版本管理等多功能的綜合工具鏈。
🤔 什麼是 uv?
uv
是一個整合式的 Python 套件安裝器與解析器。由於它使用 Rust 打造,並運用了先進的快取策略,其速度比 pip
和 conda
快上 10-100 倍。它將多個傳統工具的功能集於一身:
- 套件管理:可作為
pip
的直接替代品,用於安裝、移除、列出套件。 - 虛擬環境管理:內建
venv
功能,讓你快速建立與管理虛擬環境。 - 專案管理:透過
pyproject.toml
管理專案相依性,類似於Poetry
或PDM
。 - Locking & Syncing:支援
uv.lock
或requirements.lock
,確保團隊成員與部署環境的相依性完全一致。 - Python 版本管理:實驗性地支援安裝和管理 Python 版本。
簡單來說,uv
的目標是提供一個更快速、更現代化、更統一的 Python 開發體驗。
🚀 安裝與更新 uv
安裝 uv
非常簡單,你可以透過官方腳本或 pip
來完成。
使用 PowerShell 安裝 (Windows) 這是官方推薦的安裝方式,它會安裝一個獨立的 uv
執行檔。
powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex"
使用 pip 安裝 如果你已經有 Python 環境,也可以直接用 pip
安裝。
pip install uv
更新 uv 更新方式取決於你的安裝方法。
- 如果是透過官方腳本安裝的,使用
self update
指令:
uv self update
- 如果是透過
pip
安裝的,則使用pip
進行更新:
pip install uv -U
🛠️ 建立專案與虛擬環境
uv
讓建立新專案和虛擬環境的流程變得非常流暢。
初始化專案 使用
uv init
指令來初始化一個新專案。它會為你建立一個pyproject.toml
檔案,這是現代 Python 專案的標準設定檔。bashuv init <PROJECT_NAME>
建立虛擬環境 接著,使用
uv venv
建立虛擬環境。你還可以透過--python
參數指定要使用的 Python 版本。bash# 使用預設 Python uv venv # 指定 Python 3.11 uv venv --python 3.11
啟動與停用虛擬環境 這一步與傳統的
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
引入了 lock
和 sync
的概念。
uv lock --upgrade
這個指令會讀取pyproject.toml
中的相依性規則 (例如requests>=2.0
),然後找出所有符合條件的最新版本,並將它們的精確版本號寫入uv.lock
檔案。--upgrade
參數會強制更新到最新版本。bashuv lock --upgrade
uv sync
這個指令是確保你當前虛擬環境與uv.lock
檔案完全一致的關鍵。它會讀取uv.lock
,並快速安裝、移除或更新套件,使環境狀態與 lockfile 保持同步。這在團隊協作或部署時非常重要。bashuv sync
🐍 管理 Python 版本
uv
還加入了管理 Python 直譯器的功能。
列出可安裝的 Python 版本
bashuv python list
安裝指定的 Python 版本
bashuv python install <VERSION>
例如:
uv python install 3.12
移除已安裝的 Python 版本
bashuv python uninstall <VERSION>
這個功能讓 uv
成為一個更加全能的工具,讓你可以完全在一個工具內完成從 Python 版本管理到專案開發的所有事情。