uv 是由 Astral(Ruff 的创建者)开发的超快 Python 包管理器和解析器,用 Rust 编写。它结合了 pip、pip-tools 和 virtualenv 的功能。
安装 uv
快速安装(推荐)
# Linux/macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或使用 pip/pipx
pip install uv
pipx install uv
Windows 安装
# PowerShell
powershell -c"irm https://astral.sh/uv/install.ps1 | iex"
常用使用方法
1. 项目管理
# 初始化新项目
uv init myproject
cd myproject
# 创建虚拟环境
uv venv
# 激活虚拟环境
# Linux/macOS
source .venv/bin/activate
# Windows
.venv\Scripts\activate
2. 包管理
# 添加包到项目
uv add requests
uv add "flask>=2.0.0"
uv add pandas numpy matplotlib
# 添加开发依赖
uv add --dev pytest black ruff
# 从 requirements.txt 安装
uv pip install -r requirements.txt
# 安装当前项目(可编辑模式)
uv pip install -e .
# 移除包
uv remove requests
3. 锁文件和依赖解析
# 生成/更新锁文件
uv lock
# 根据锁文件同步环境
uv sync
# 更新所有依赖到最新版本
uv sync --upgrade
# 生成 requirements.txt
uv pip freeze > requirements.txt
4. 运行命令
# 在项目环境中运行命令(无需激活虚拟环境)
uv run python script.py
# 运行特定 Python 版本
uv run --python 3.10 python script.py
# 运行测试
uv run pytest
# 运行任何命令
uv run black . --check
5. 高级功能
# 使用指定 Python 版本
uv python install 3.11
uv run --python 3.11 python --version
# 快速创建项目模板
uv init --package mypackage
# 只生成锁文件而不安装
uv lock --no-sync
# 离线模式(使用缓存)
uv sync --offline
# 显示依赖树
uv pip list --tree
项目配置示例
pyproject.toml 配置示例
[project]
name = "myproject"
version = "0.1.0"
dependencies = [
"requests>=2.28.0",
"pandas>=1.5.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"black>=23.0.0",
]
test = [
"pytest-cov>=4.0.0",
]
[tool.uv]
python = ">=3.9"
工作流示例
# 1. 创建新项目
uv init myapp
cd myapp
# 2. 添加依赖
uv add fastapi "pydantic>=2.0.0"
uv add --dev pytest httpx
# 3. 设置 Python 版本
uv python install 3.11
# 4. 同步依赖
uv sync
# 5. 运行应用
uv run fastapi dev main.py
# 6. 更新依赖
uv sync --upgrade
# 7. 生产环境部署
uv sync --no-dev # 只安装生产依赖
uv 与传统工具对比
| | | |
| python -m venv .venv | uv venv | |
| pip install requests | uv add requests | |
| pip install -r requirements.txt | uv sync | |
| pip freeze | uv pip freeze | |
实用技巧
- 4. 向后兼容:兼容 pip 和 requirements.txt 格式
常见问题
# 如果遇到权限问题
export UV_BUILD_ISOLATION=0
# 清理缓存
uv cache clean
# 查看版本
uv --version
# 获取帮助
uv --help
uv add --help
uv 最大的优势是速度 - 在大型项目中,依赖解析和安装速度通常比 pip 快 10-100 倍,特别适合 CI/CD 流水线和开发工作流。