uv
uv 是 Astral 团队用 Rust 开发的 Python 包与项目管理工具,安装速度比 pip 快 10–100 倍,同时整合了 pip、pip-tools、virtualenv、pyenv 的功能,是现代 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 |
| 内置虚拟环境 | 自动创建和管理 .venv,uv 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 findpip 兼容模式
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/simpleuv vs pip vs conda
| 特性 | pip | uv | conda |
|---|---|---|---|
| 安装速度 | 中等 | 极快(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