Python 开发者最头疼的事情之一就是包管理。pip 安装慢、依赖冲突、虚拟环境混乱...这些问题困扰了大家多年。
现在,终于有一个工具能彻底解决这些痛点。它就是 uv——一个用 Rust 编写的 Python 包管理器,比 pip 快 10-100 倍。
什么是 uv?
uv 是由 Astral 团队开发的极速 Python 包管理器。Astral 是 Ruff(最快的 Python linter)和 ty(类型检查器)的创造者,在 Python 工具链领域有着深厚积累。
uv 不仅仅是一个更快的 pip,它是一个全能的 Python 项目管理工具:
●替代 pip、pip-tools、pipx、poetry、pyenv、virtualenv、twine 等多个工具
●管理 Python 版本
●管理项目和依赖
●运行脚本和工具
●构建和发布包
一个工具,解决所有 Python 包管理需求。
核心优势
| 特性 |
uv |
传统工具 |
| 速度 |
10-100x 更快 |
基准线 |
| 语言 |
Rust(原生性能) |
Python |
| 功能 |
全能工具链 |
需要多个工具 |
| 缓存 |
全局去重 |
各环境独立 |
| 锁文件 |
内置支持 |
需要额外配置 |
安装方式
推荐方式(独立安装器)
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
通过 pip 安装
pip install uv
# 或
pipx install uv
自更新
如果通过独立安装器安装,可以直接自更新:
uv self update
项目管理
创建新项目
# 初始化项目
uv init example
cd example
# 添加依赖
uv add ruff
# 运行命令
uv run ruff check
输出示例:
Initialized project `example` at `/home/user/example`
Creating virtual environment at: .venv
Resolved 2 packages in 170ms
Installed 2 packages in 1ms
+ example==0.1.0
+ ruff==0.5.0
依赖管理
# 添加依赖
uv add requests
# 添加开发依赖
uv add --dev pytest
# 移除依赖
uv remove requests
# 锁定依赖
uv lock
# 同步环境
uv sync
通用锁文件
uv 使用通用锁文件(universal lockfile),确保跨平台一致性:
●支持跨平台依赖解析
●可重现的构建
●团队协作友好
脚本运行
uv 支持单文件脚本的依赖管理,这是一个非常实用的功能。
创建带依赖的脚本
# 创建脚本
echo 'import requests; print(requests.get("https://astral.sh"))' > example.py
# 添加内联依赖元数据
uv add --script example.py requests
# 运行脚本(自动创建隔离环境)
uv run example.py
输出:
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
内联元数据示例
脚本会自动添加 PEP 723 元数据:
# /// script
# requires-python = ">=3.11"
# dependencies = ["requests"]
# ///
import requests
print(requests.get("https://astral.sh"))
工具运行
uv 可以像 pipx 一样运行和安装命令行工具。
临时运行(uvx)
# 一次性运行工具(临时环境)
uvx pycowsay 'hello world!'
输出:
Resolved 1 package in 167ms
Installed 1 package in 9ms
+ pycowsay==0.0.0.2
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\\ )\/\\
||----w |
|| ||
永久安装
# 安装工具
uv tool install ruff
# 查看版本
ruff --version
# 安装多个工具
uv tool install black mypy pytest
Python 版本管理
uv 可以替代 pyenv,管理多个 Python 版本。
安装 Python
# 安装多个版本
uv python install 3.12 3.13 3.14
输出:
Installed 3 versions in 972ms
+ cpython-3.12.12-macos-aarch64-none (python3.12)
+ cpython-3.13.9-macos-aarch64-none (python3.13)
+ cpython-3.14.0-macos-aarch64-none (python3.14)
使用特定版本
# 创建指定版本的虚拟环境
uv venv --python 3.12.0
# 使用 PyPy 运行
uv run --python pypy@3.8 -- python --version
固定项目版本
# 在当前目录固定 Python 版本
uv python pin 3.11
这会创建 .python-version 文件,确保团队使用一致的 Python 版本。
pip 兼容接口
uv 提供完全兼容 pip 的命令接口,无需改变现有工作流即可获得性能提升。
常用命令对照
| pip 命令 |
uv 命令 |
| pip install |
uv pip install |
| pip uninstall |
uv pip uninstall |
| pip freeze |
uv pip freeze |
| pip list |
uv pip list |
| pip show |
uv pip show |
依赖编译
# 编译依赖(类似 pip-tools)
uv pip compile requirements.in \
--universal \
--output-file requirements.txt
虚拟环境
# 创建虚拟环境
uv venv
# 激活
source .venv/bin/activate
# 同步依赖
uv pip sync requirements.txt
高级特性
工作区支持
uv 支持 Cargo 风格的工作区(workspaces),适合大型 monorepo 项目:
●多包管理
●共享依赖
●统一版本控制
全局缓存
uv 使用全局缓存,不同项目间共享已下载的包:
●节省磁盘空间
●加速后续安装
●自动去重
跨平台解析
# 生成跨平台 requirements
uv pip compile requirements.in --universal
支持为不同平台生成锁定的依赖文件。
可重现解析
uv 支持确定性解析,确保在不同时间、不同机器上得到相同的依赖解析结果。
性能基准
根据官方基准测试,uv 比 pip 快 10-100 倍:
| 操作 |
pip |
uv |
加速比 |
| 安装 Trio 依赖(冷缓存) |
~30s |
~1s |
30x |
| 安装 Trio 依赖(热缓存) |
~5s |
~50ms |
100x |
| 创建虚拟环境 |
~2s |
~20ms |
100x |
| 解析依赖 |
~3s |
~30ms |
100x |
设计理念
为什么用 Rust?
●原生性能:接近 C 的执行速度
●内存安全:无需 GC,无内存泄漏
●并发友好:充分利用多核 CPU
●跨平台:一次编写,处处运行
技术来源
uv 站在巨人的肩膀上:
●PubGrub:依赖解析算法
●Cargo:Git 实现
●pnpm / Bun:缓存优化灵感
●Posy:Windows trampoline 技术
常见问题
发音
"you - vee"(/juː viː/),就念 "uv"。
生产就绪?
是的,uv 已经广泛用于生产环境,包括大型企业的 CI/CD 流程。
版本策略
uv 遵循语义化版本,API 稳定可靠。
总结
uv 代表了 Python 工具链的未来:
●极快的速度:10-100x 性能提升
●全能的功能:一个工具替代多个工具
●无缝迁移:兼容现有 pip 工作流
●生产就绪:稳定可靠,广泛使用
无论你是个人开发者还是企业团队,uv 都值得一试。告别漫长的 pip install,拥抱极速的包管理体验。
项目地址:https://github.com/astral-sh/uv
官方文档:https://docs.astral.sh/uv/
PyPI:https://pypi.org/project/uv/
Discord:https://discord.gg/astral-sh
一个命令,开启 Python 包管理的极速时代。