Python 开发者终于不用在 pip、poetry、pipenv 之间纠结了。由 Ruff 背后的 Astral 团队打造的 uv,正在以惊人的速度改变 Python 包管理的格局。
uv 是什么?
uv 是一个用 Rust 编写的 Python 包和项目管理工具,设计目标只有一个:极致的速度。
| 特性 | 说明 |
|---|---|
| 包安装 | 兼容 pip 的依赖解析与安装 |
| 项目管理 | 替代 poetry/pipenv,管理虚拟环境和依赖 |
| 缓存机制 | 全局缓存 + 硬链接,秒级重复安装 |
| 多 Python 版本 | 自动安装和管理多个 Python 版本 |
| 零配置工作流 | uv init + uv add 即可开始 |
| 许可证 | MIT(完全开源) |
Astral 团队(也是 Ruff 的作者)把他们在 Rust 高性能工具链上的经验全部倾注到了 uv 上,结果就是:比 pip 快 10-100 倍。
📦 GitHub: https://github.com/astral-sh/uv ⭐ Stars: 50k+ (2026 年中) 📄 License: MIT
安装 uv
uv 的安装方式极其简单,一行命令搞定:
# 官方推荐方式 — 安装脚本
curl -LsSf https://astral.sh/uv/install.sh | sh
安装完成后验证:
uv --version
# uv 0.7.x
如果你使用 Homebrew(macOS/Linux):
brew install uv
或者用 pipx:
pipx install uv
快速上手:创建第一个项目
初始化项目
# 创建新项目(自动生成 pyproject.toml + 虚拟环境)
uv init my-app
cd my-app
看看生成的文件结构:
my-app/
├── .python-version # 锁定 Python 版本
├── pyproject.toml # 项目配置
├── README.md
├── main.py
└── uv.lock # 依赖锁定文件
pyproject.toml 内容非常干净:
[project]
name = "my-app"
version = "0.1.0"
description = "Add your description here"
requires-python = ">=3.12"
dependencies = []
添加依赖
# 添加生产依赖(自动解析 + 安装 + 锁定)
uv add requests
uv add fastapi
uv add "pydantic>=2.0"
# 添加开发依赖
uv add --dev pytest ruff mypy
一条命令同时完成:依赖解析 → 下载 → 安装 → 更新 uv.lock,整个过程通常只需几秒。
运行代码
# 在虚拟环境中运行脚本
uv run python main.py
# 运行已安装的工具
uv run pytest
uv run ruff check .
uv run 会自动激活项目虚拟环境,不需要手动 source .venv/bin/activate。
进阶功能
多 Python 版本管理
uv 内置了 Python 版本管理器,可以自动下载和管理多个 Python 版本:
# 查看已安装的 Python 版本
uv python list
# 安装特定版本的 Python
uv python install 3.13
uv python install 3.11
# 为项目指定 Python 版本
uv python pin 3.13
# 在特定版本下运行
uv run --python 3.11 python main.py
这解决了长期困扰 Python 开发者的痛点 — 不再需要 pyenv。
工作区(Workspace)
如果你的项目有多个包,uv 的工作区功能非常适合:
# 初始化工作区
uv init --package packages/core
uv init --package packages/cli
pyproject.toml:
[tool.uv.workspace]
members = ["packages/*"]
脚本管理
uv 支持在 pyproject.toml 中定义脚本别名:
[tool.uv.scripts]
dev = "uvicorn main:app --reload"
test = "pytest tests/"
lint = "ruff check . && mypy src/"
然后直接运行:
uv run dev
uv run test
CI/CD 集成
在 GitHub Actions 中使用 uv:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Set up Python
run: uv python install
- name: Install dependencies
run: uv sync --frozen
- name: Run tests
run: uv run pytest
enable-cache: true 会缓存 uv 的包下载,CI 速度提升非常明显。
与 pip/poetry 的速度对比
以下是 Astral 官方提供的基准测试数据(安装 Django 及其所有依赖):
| 工具 | 首次安装 | 缓存安装 |
|---|---|---|
| pip | ~15s | ~3s |
| poetry | ~20s | ~5s |
| uv | ~1.5s | ~0.3s |
uv 快的核心原因:
- Rust 实现 — 依赖解析引擎用 Rust 编写,比 Python 快几个数量级
- 全局缓存 — 包下载后全局缓存,项目间通过硬链接共享
- 并行下载 — 同时下载多个包,充分利用网络带宽
- 智能缓存 — 解析结果也会被缓存,避免重复计算
从 pip/poetry 迁移
从 pip 迁移
# 用现有 requirements.txt 创建项目
uv pip install -r requirements.txt
# 或者创建新项目后导入
uv init
uv add -r requirements.txt
从 poetry 迁移
# 直接从 pyproject.toml 同步依赖
uv sync
# 如果需要重新锁定
uv lock
uv 完全兼容 pyproject.toml 格式,大多数 poetry 项目可以直接切换。
实用命令速查
# 项目管理
uv init <name> # 创建新项目
uv add <package> # 添加依赖
uv remove <package> # 移除依赖
uv sync # 同步依赖(类似 pip install -e .)
uv lock # 重新锁定依赖
# 运行
uv run <command> # 在虚拟环境中运行命令
uv tool run <tool> # 运行临时工具(类似 pipx run)
uv tool install <tool> # 安装全局工具
# Python 管理
uv python install <ver> # 安装 Python 版本
uv python list # 列出已安装版本
uv python pin <ver> # 固定项目 Python 版本
# 缓存
uv cache dir # 查看缓存目录
uv cache clean # 清理缓存
总结
uv 正在成为 Python 开发者的新标准工具。它由 Ruff 团队打造,速度极快,API 设计简洁,而且完全开源。
推荐场景:
- ✅ 新项目 — 直接用
uv init开始 - ✅ CI/CD — 缓存友好,构建速度显著提升
- ✅ 多 Python 版本项目 — 内置版本管理
- ✅ 从 poetry/pipenv 迁移 — 兼容 pyproject.toml
如果你还在用 pip + venv 或者 poetry,强烈建议试试 uv — 一旦体验过秒级安装的速度,就回不去了。
🔗 官方文档: https://docs.astral.sh/uv/ 🔗 GitHub: https://github.com/astral-sh/uv