uv vs pip 完整对比
核心区别
| 特性 | pip | uv |
|---|---|---|
| 速度 | 基准速度 | 10-100倍更快 |
| 语言 | Python | Rust (性能优化) |
| 依赖解析 | 较慢,有时不一致 | 快速且确定性 |
| 磁盘缓存 | 基础缓存 | 全局缓存,跨项目共享 |
| 虚拟环境 | 需要 venv/virtualenv | 内置 uv venv |
| 锁文件 | 需要 pip-tools | 原生支持 uv.lock |
| 项目管理 | 仅包管理 | 完整项目管理 |
| 成熟度 | 非常成熟 | 较新(2023+),快速发展 |
1. 速度对比 ⚡
基准测试示例
bash
# pip 安装 Django + 依赖
time pip install django
# 真实时间: ~45秒
# uv 安装相同包
time uv pip install django
# 真实时间: ~2秒
uv 更快的原因:
- Rust 编写,底层优化
- 并行下载和安装
- 智能缓存机制
- 零拷贝优化
2. 命令对比
包安装
bash
# pip
pip install requests
pip install -r requirements.txt
pip install -e .
# uv (兼容 pip 语法)
uv pip install requests
uv pip install -r requirements.txt
uv pip install -e .
虚拟环境
bash
# pip 需要配合 venv
python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
pip install requests
# uv 一体化
uv venv
source .venv/bin/activate # 激活
uv pip install requests
# uv 甚至可以无需激活
uv pip install requests --python .venv
锁文件和依赖管理
bash
# pip 需要 pip-tools
pip install pip-tools
pip-compile pyproject.toml -o requirements.txt
pip-sync requirements.txt
# uv 原生支持
uv pip compile pyproject.toml -o requirements.txt
uv pip sync requirements.txt
# uv 项目模式(类似 poetry)
uv sync # 自动生成和同步 uv.lock
3. 依赖解析
pip 的问题
bash
# pip 可能安装冲突的依赖
pip install package-a package-b
# 可能导致依赖版本冲突,但不报错
uv 的优势
bash
# uv 严格检查依赖兼容性
uv pip install package-a package-b
# 如果有冲突,立即报错并给出解决建议
# uv 使用确定性算法,相同输入总是相同输出
4. 功能对比表
| 功能 | pip | uv |
|---|---|---|
| 安装包 | ✅ | ✅ |
| 卸载包 | ✅ | ✅ |
| 升级包 | ✅ | ✅ |
| 列出包 | ✅ | ✅ |
| 搜索包 | ✅ | ❌ (暂不支持) |
| 创建虚拟环境 | ❌ (需要venv) | ✅ uv venv |
| 锁定依赖 | ❌ (需要pip-tools) | ✅ uv lock |
| 项目管理 | ❌ | ✅ uv init, uv sync |
| Python 版本管理 | ❌ | ✅ uv python install |
| 脚本运行 | ❌ | ✅ uv run |
| 工具安装 | ❌ (需要pipx) | ✅ uv tool |
5. 高级功能
uv 独有功能
a) Python 版本管理
bash
# 安装特定 Python 版本
uv python install 3.11 3.12
# 列出可用版本
uv python list
# 使用特定版本创建环境
uv venv --python 3.11
b) 项目管理(类似 Poetry/PDM)
bash
# 初始化项目
uv init my-project
cd my-project
# 添加依赖(自动更新 pyproject.toml)
uv add requests pandas
# 添加开发依赖
uv add --dev pytest black
# 同步依赖(根据 uv.lock)
uv sync
# 运行脚本
uv run python main.py
uv run pytest
c) 工具管理(类似 pipx)
bash
# 安装独立工具
uv tool install ruff
uv tool install black
# 运行工具
uv tool run ruff check .
# 列出已安装工具
uv tool list
d) 脚本运行(内联依赖)
python
# script.py
# /// script
# dependencies = ["requests", "rich"]
# ///
import requests
from rich import print
response = requests.get("https://api.github.com")
print(response.json())
bash
# 自动创建临时环境并运行
uv run script.py
6. 配置和镜像源
pip 配置
bash
# 临时使用镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
uv 配置
bash
# 临时使用
uv pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple requests
# 环境变量配置
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
# pyproject.toml 配置
[tool.uv.pip]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
7. 迁移指南
从 pip 迁移到 uv
bash
# 1. 安装 uv
pip install uv # 或使用官方安装脚本
# 2. 现有项目直接替换命令
# 原来: pip install -r requirements.txt
# 现在: uv pip install -r requirements.txt
# 3. 生成 uv.lock 锁文件
uv pip compile pyproject.toml -o uv.lock
# 4. 使用项目模式(推荐)
uv sync # 自动读取 pyproject.toml
兼容性
bash
# uv 完全兼容 pip 的基本命令
pip install requests ➜ uv pip install requests
pip freeze ➜ uv pip freeze
pip list ➜ uv pip list
pip show requests ➜ uv pip show requests
pip uninstall requests ➜ uv pip uninstall requests
8. 何时使用哪个?
使用 pip 的场景
- ✅ 生产环境稳定性要求极高
- ✅ 需要 pip 特有的边缘功能
- ✅ CI/CD 已经成熟配置
- ✅ 团队不愿意切换工具
使用 uv 的场景
- ✅ 新项目(强烈推荐)
- ✅ 需要快速安装大量依赖
- ✅ 频繁创建/删除虚拟环境
- ✅ 想要现代化的项目管理体验
- ✅ 多 Python 版本开发
- ✅ 个人开发环境
9. 实际性能对比
bash
# 测试:安装 FastAPI 及其所有依赖
# pip
$ time pip install fastapi[all]
真实时间: 58.3秒
用户时间: 12.1秒
系统时间: 3.4秒
# uv
$ time uv pip install fastapi[all]
真实时间: 3.2秒 ⚡ 快 18倍
用户时间: 1.8秒
系统时间: 0.6秒
10. 总结建议
推荐策略
bash
# 方案1: 渐进式迁移
# 保留 pip,局部使用 uv 加速
pip install uv
uv pip install -r requirements.txt # 仅安装时用 uv
# 方案2: 完全切换(新项目)
uv init my-project
cd my-project
uv add fastapi uvicorn
uv sync
uv run uvicorn main:app
# 方案3: 混合使用
# CI/CD 用 pip(稳定)
# 本地开发用 uv(快速)
一句话总结
uv = pip 的高性能替代品 + Poetry 的项目管理 + pyenv 的版本管理
如果追求开发效率和现代化体验,强烈推荐尝试 uv!