uv
是一個由 Astral (Ruff 的創建者) 開發的極速 Python 包和項目管理器,用 Rust 編寫。它旨在作為傳統 Python 包管理工具(如 pip
、pip-tools
、pipx
、poetry
、pyenv
、twine
和 virtualenv
等)的替代品,通過其高性能和多功能集成,解決 Python 生態系統中常見的痛點,例如安裝速度慢、依賴沖突和環境管理復雜性。
1. uv
工具的基本介紹、背景和主要功能
uv
的核心目標是提供一個統一、高效的解決方案,以簡化 Python 項目的開發工作流。
背景:
Python 的包管理生態系統長期以來存在一些挑戰,包括安裝速度慢、依賴解析效率低以及工具鏈碎片化(需要使用多個工具來完成不同的任務)。uv
的出現旨在通過 Rust 的性能優勢和一體化設計,克服這些問題,提供一個更快速、更可靠、更易用的開發體驗。
主要功能:
- 極速性能:比
pip
快 10-100 倍,尤其在處理大型項目和復雜依賴時表現出色。 - 一體化解決方案:集成了
pip
、pip-tools
、pipx
、poetry
、pyenv
、twine
和virtualenv
等多種工具的功能,簡化了工作流。 - 全面的項目管理:提供統一的鎖文件 (
uv.lock
),確保環境的可復現性。 - 虛擬環境管理:內置虛擬環境創建和管理功能,無需單獨使用
virtualenv
或venv
。 - Python 版本管理:支持安裝和管理多個 Python 版本。
- 腳本執行:能夠運行帶有內聯依賴元數據的腳本。
- 命令行工具管理:可以運行和安裝作為 Python 包發布的命令行工具(類似于
pipx
)。 - 兼容
pip
接口:提供pip
兼容接口,方便現有項目平滑遷移。 - 磁盤空間效率:通過全局緩存實現依賴去重,節省磁盤空間。
- 跨平臺支持:支持 macOS、Linux 和 Windows 操作系統。
- 無需 Rust 或 Python 即可安裝:可以通過
curl
或pip
輕松安裝。
2. uv
工具的安裝方法和基本使用流程
uv
的安裝非常便捷,并且提供了多種方式。
安裝方法:
- 獨立安裝程序 (推薦):
- macOS 和 Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh # 或者指定版本 curl -LsSf https://astral.sh/uv/install.sh | sh -s -- --version 0.6.12
- Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- macOS 和 Linux:
- 通過
pipx
安裝:
(需要先安裝pipx install uv
pipx
) - 通過
pip
安裝:
(不推薦全局安裝,可能導致系統 Python 環境混亂)pip install uv
更新 uv
:
- 如果通過獨立安裝程序安裝:
uv self update
- 如果通過
pipx
安裝:pipx upgrade uv
基本使用流程:
-
驗證安裝:
uv --version
應顯示
uv
的版本信息。 -
創建虛擬環境:
uv
可以自動管理虛擬環境。你也可以手動創建:uv venv # 或指定 Python 版本 uv venv --python 3.12.0
這會在當前目錄下創建一個名為
.venv
的虛擬環境。 -
激活虛擬環境:
source .venv/bin/activate # macOS/Linux .venv\Scripts\activate # Windows
-
安裝依賴:
- 安裝單個包:
uv add requests
- 安裝
requirements.txt
中的依賴:uv pip install -r requirements.txt
- 同步鎖文件中的依賴:
uv pip sync docs/requirements.txt
- 安裝單個包:
-
運行腳本或命令:
uv run
會自動鎖定和同步項目依賴,然后執行命令。uv run python your_script.py
3. uv
工具的使用示例和最佳實踐
uv
提供了豐富的功能來管理 Python 項目的生命周期。
項目初始化與依賴管理:
-
初始化新項目:
uv init my_project cd my_project
這會創建一個包含
.git/
、.gitignore
、.python-version
、README.md
、main.py
和pyproject.toml
的項目結構。 -
添加依賴:
uv add requests pandas
這會將
requests
和pandas
添加到pyproject.toml
的[project].dependencies
中,并自動更新uv.lock
文件。 -
添加開發依賴:
uv add ruff --dev
這會將
ruff
添加到pyproject.toml
的[project].optional-dependencies
或[tool.uv.dependency-groups]
中。 -
移除依賴:
uv remove requests
-
鎖文件 (
uv.lock
):
uv
會自動生成和管理uv.lock
文件,其中包含所有依賴的精確版本。最佳實踐是將其提交到版本控制中,以確保團隊成員和部署環境之間的一致性。 -
編譯
requirements.txt
:
如果你需要生成pip
兼容的requirements.txt
文件:uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt
命令行工具管理:
-
臨時運行工具 (
uvx
):
uvx
是uv tool run
的別名,它會在一個臨時的、隔離的環境中運行工具,而無需全局安裝。uvx pycowsay 'hello from uv' uvx ruff check
這對于不經常使用的工具或避免全局環境污染非常有用。
-
全局安裝工具:
uv tool install ruff
安裝后,工具的可執行文件會添加到
PATH
中,可以直接調用。 -
升級已安裝工具:
uv tool upgrade ruff
腳本執行:
- 運行帶有內聯元數據的腳本:
uv
可以讀取腳本文件中的內聯元數據來安裝和運行其依賴。echo 'import requests; print(requests.get("https://www.example.com"))' > example.py uv add --script example.py requests uv run example.py
構建和發布包:
-
構建分發包:
uv build
這會生成源代碼分發包 (
.tar.gz
) 和輪子文件 (.whl
)。 -
發布包到 PyPI:
uv publish
(通常需要配置 PyPI 憑據,例如通過
~/.pypirc
文件或環境變量)
CI/CD 集成:
uv
提供了與持續集成/持續部署 (CI/CD) 流程的良好集成。
-
GitHub Actions:
推薦使用官方的astral-sh/setup-uv
Action 來安裝uv
并配置緩存。name: Example jobs:uv-example:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Install uvuses: astral-sh/setup-uv@v5with:version: 0.6.12 # 固定 uv 版本
-
GitLab CI/CD:
Astral 提供了預裝uv
的 Docker 鏡像,可以直接在.gitlab-ci.yml
中使用。variables:UV_VERSION: "0.5"PYTHON_VERSION: "3.12"BASE_LAYER: bookworm-slim uv:image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
uv
與其他工具的比較:
下表總結了 uv
與 pip
、virtualenv
、Conda
和 Poetry
的主要區別:
特性 | uv | PIP + virtualenv | Conda | Poetry |
---|---|---|---|---|
實現語言 | Rust | Python | Python | Python |
速度 | 比 pip 快 10-100 倍 | 基準 | 比 pip 慢 | 比 pip 快 |
內存使用 | 非常高效 | 較高 | 高 | 中等 |
環境管理 | 內置 | 需要單獨工具 | 內置 | 內置 |
依賴解析 | 快速,現代化解析器 | 基本 | 全面 | 現代化解析器 |
非 Python 包 | 否 | 否 | 是 | 否 |
鎖文件 | 是 (uv.lock ) | 否 (基本 requirements.txt ) | 是 | 是 |
項目結構 | 是 | 否 | 否 | 是 |
包發布 | 是 | 是 (配合 twine ) | 是 | 是 |
兼容性 | 與現有 pip 生態系統兼容 | 標準 Python 工具 | 獨立生態系統 | 更具主觀性 |
錯誤處理 | 清晰的錯誤信息 | 基本 | 良好 | 良好 |
資源占用 | 極小 | 中等 | 重 | 中等 |
科學計算重點 | 否 | 否 | 是 | 否 |
跨平臺一致性 | 良好 | 有限 | 優秀 | 良好 |