UV —— 用 Rust 重塑 Python 包管理,10-100 倍性能提升

# UV —— 用 Rust 重塑 Python 包管理,10-100 倍性能提升

## 项目介绍

UV 是由 Astral 公司( Ruff 和 Ty 的开发商)用 Rust 编写的极速 Python 包和项目管理器。Astral 团队以”极致性能”著称,UV 将 Python 包安装速度提升了 10-100 倍,同时用一个工具替代了 pip、pip-tools、pipx、poetry、pyenv、virtualenv、twine 等多个传统工具。

UV 支持 macOS、Linux 和 Windows,安装简单无需 Python 或 Rust 环境,一行命令即可完成安装。由于其卓越的性能表现,UV 已被越来越多的 Python 项目采用,部分 Python 框架已将其纳入 CI/CD 默认工具链。

## 核心特色功能

**极速性能**:UV 使用 Rust 编写并优化了大量核心操作,安装依赖的速度比 pip 快 10-100 倍。基准测试显示,安装一个中等规模项目的所有依赖,UV 只需几秒,而 pip 需要几分钟。

**统一工具链**:用一个 UV 替代所有传统 Python 工具:
– pip → `uv pip install`
– pip-tools → `uv pip compile`
– pipx → `uv tool install`
– poetry → `uv add` / `uv sync`
– pyenv → `uv python install`
– virtualenv → `uv venv`(自动创建)

**通用锁文件**:UV 使用跨项目共享的 lockfile,所有项目共享同一个全局依赖缓存,节省磁盘空间。

**脚本支持**:UV 支持直接运行 Python 脚本,脚本头部可以内嵌依赖声明:

“`python
# /// script
# requires-python = “>=3.11”
# dependencies = [
# “requests”,
# “rich”,
# ]
# ///
import requests
from rich.inspect import inspect
print(“Hello from UV!”)
“`

运行脚本时会自动安装依赖:`uv run script.py`

**Python 版本管理**:内置 Python 版本安装和管理功能,一条命令即可安装不同版本:

“`bash
uv python install 3.11 3.12 3.13
uv python list # 查看已安装版本
“`

**全局工具管理**:像 pipx 一样安装全局可用的 CLI 工具:

“`bash
uv tool install httpie
uv tool run httpie GET example.com
“`

**Cargo 风格工作区**:支持 monorepo 风格的多项目管理工作区(workspace)。

**磁盘高效**:所有依赖全局共享缓存,同一包的不同版本只存一份,节省大量磁盘空间。

## 安装步骤

**macOS / Linux(官方安装脚本)**:

“`bash
curl -LsSf https://astral.sh/uv/install.sh | sh
“`

**Windows(PowerShell)**:

“`powershell
powershell -ExecutionPolicy ByPass -c “irm https://astral.sh/uv/install.ps1 | iex”
“`

**通过 pip/pipx 安装**(不要求系统已有 UV):

“`bash
pip install uv
# 或
pipx install uv
“`

**更新 UV**:

“`bash
uv self update
“`

## 基本使用教程

### 创建新项目

“`bash
uv init myproject
cd myproject
“`

这会创建一个标准 Python 项目结构:

“`
myproject/
├── pyproject.toml
├── src/
│ └── myproject.py
├── README.md
└── .python-version
“`

### 添加依赖

“`bash
uv add requests rich
“`

这会自动更新 pyproject.toml 和 lockfile,并安装依赖。

### 安装项目依赖

“`bash
uv sync
“`

### 运行脚本

“`bash
uv run python script.py
“`

### 替代 pip

最常见的用法是替代 pip,直接用 uv 安装包:

“`bash
uv pip install flask django requests
“`

### 冻结依赖

“`bash
uv pip freeze > requirements.txt
“`

### 创建虚拟环境

“`bash
uv venv
# 指定 Python 版本
uv venv –python 3.12
“`

激活虚拟环境:

“`bash
source .venv/bin/activate # Linux/macOS
# Windows: .venv\Scripts\activate
“`

## 使用 requirements.in 编译

传统 pip-compile 工作流:

“`bash
# 创建 requirements.in
echo “requests>=2.28” > requirements.in

# 编译为 requirements.txt(锁定精确版本)
uv pip compile requirements.in -o requirements.txt

# 从 requirements.txt 安装
uv pip sync requirements.txt
“`

## 在 CI/CD 中使用

UV 特别适合 CI 环境,因为其极速安装可以显著缩短 CI 构建时间。

**GitHub Actions 示例**:

“`yaml
– name: Install UV
uses: astral-sh/setup-uv@v4

– name: Install dependencies
run: uv sync –frozen

– name: Run tests
run: uv run pytest
“`

setup-uv Action 会自动缓存 UV 和依赖,让 CI 速度极快。

## 与 Docker 配合

在 Docker 构建中使用 UV:

“`dockerfile
FROM python:3.12-slim

# 安装 UV
COPY –from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync –frozen –no-dev

COPY . .
CMD [“uv”, “run”, “python”, “main.py”]
“`

这样构建出的 Docker 镜像只包含运行时代码和依赖,没有 UV 工具本身,体积很小。

## 常用命令一览

| 功能 | 命令 |
|——|——|
| 安装包 | `uv pip install ` |
| 卸载包 | `uv pip uninstall ` |
| 列出已安装 | `uv pip freeze` |
| 创建项目 | `uv init ` |
| 添加依赖 | `uv add ` |
| 同步依赖 | `uv sync` |
| 运行脚本 | `uv run