uv

uv 是 Astral 团队用 Rust 开发的 Python 包与项目管理工具,安装速度比 pip 快 10–100 倍,同时整合了 pippip-toolsvirtualenvpyenv 的功能,是现代 Python 项目的首选工具链。

同类工具:pip(官方标准,兼容性最广)。

安装

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
 
# Windows(PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
 
# 通过 pip 安装(已有 Python 时)
pip install uv
 
# 验证 / 升级
uv --version
uv self update

核心概念

概念说明
项目模式通过 pyproject.toml + uv.lock 管理依赖,类似 npm 的 package.json
uv.lock精确锁文件,跨平台一致,必须提交到 Git
内置虚拟环境自动创建和管理 .venvuv run 时自动激活
Python 版本管理内置 Python 版本安装和切换,替代 pyenv

项目管理(推荐工作流)

初始化项目

uv init my-project
cd my-project
 
# 生成结构:
# ├── pyproject.toml    # 项目配置与依赖声明
# ├── uv.lock           # 锁文件(提交到 Git)
# ├── .venv/            # 虚拟环境(不提交)
# └── hello.py

添加和移除依赖

# 添加生产依赖(自动更新 pyproject.toml 和 uv.lock)
uv add requests
uv add "fastapi>=0.110.0"
 
# 添加开发依赖
uv add --dev pytest ruff mypy
 
# 移除依赖
uv remove requests
 
# 同步环境(根据 uv.lock 安装所有依赖)
uv sync
 
# CI/CD 严格模式(不更新 lockfile)
uv sync --frozen

运行脚本

# uv 自动激活虚拟环境,无需手动 source .venv/bin/activate
uv run python hello.py
uv run pytest
uv run ruff check .

pyproject.toml 示例

[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "fastapi>=0.110.0",
    "sqlalchemy>=2.0.0",
    "httpx>=0.27.0",
]
 
[tool.uv]
dev-dependencies = [
    "pytest>=8.0.0",
    "ruff>=0.4.0",
    "mypy>=1.10.0",
]

Python 版本管理

# 查看可安装版本
uv python list
 
# 安装指定版本
uv python install 3.12
uv python install 3.11 3.12 3.13
 
# 固定项目 Python 版本(生成 .python-version 文件)
uv python pin 3.12
 
# 查看当前使用的 Python
uv python find

pip 兼容模式

uv 提供与 pip 兼容的子命令,可直接替代 pip 用在现有项目中,无需迁移到 pyproject.toml

uv pip install requests
uv pip install -r requirements.txt
uv pip install "django>=4.2,<5.0"
uv pip uninstall requests
uv pip list
uv pip show requests
 
# 生成锁文件(等价于 pip-compile)
uv pip compile requirements.in -o requirements.txt
 
# 同步环境(等价于 pip-sync)
uv pip sync requirements.txt

虚拟环境管理

# 创建虚拟环境(默认 .venv)
uv venv
uv venv .venv --python 3.12
 
# 手动激活(通常用 uv run 替代)
source .venv/bin/activate     # macOS / Linux
.venv\Scripts\activate        # Windows
 
# 重建
rm -rf .venv && uv venv

独立脚本运行(无需项目)

在脚本顶部声明依赖,uv 运行时自动创建临时隔离环境:

# script.py
# /// script
# requires-python = ">=3.11"
# dependencies = ["requests", "rich"]
# ///
 
import requests
from rich import print
 
print(requests.get("https://api.github.com").json())
uv run script.py   # 自动安装依赖并运行,不污染全局环境

镜像源配置(国内加速)

# pyproject.toml 或项目根目录 uv.toml
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

或通过环境变量:

export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple

uv vs pip vs conda

特性pipuvconda
安装速度中等极快(Rust)
锁文件requirements.txt(手动)uv.lock(自动)environment.yml
虚拟环境需配合 venv内置内置
Python 版本管理不支持内置内置
非 Python 依赖不支持不支持支持
适用场景通用现代 Python 项目数据科学

常用命令速查

uv init                      # 初始化项目
uv add <pkg>                 # 添加生产依赖
uv add --dev <pkg>           # 添加开发依赖
uv remove <pkg>              # 移除依赖
uv sync                      # 同步环境(按 uv.lock)
uv sync --frozen             # CI 严格模式
uv run <cmd>                 # 运行命令(自动激活 venv)
uv python install 3.12       # 安装 Python 版本
uv python pin 3.12           # 固定项目 Python 版本
uv pip install <pkg>         # pip 兼容模式
uv pip install -r requirements.txt
uv venv                      # 创建虚拟环境
uv self update               # 升级 uv

相关链接

  • pip — Python 官方包管理器,兼容性最广
  • Python 基础 — Python 语言基础