uv 是 Astral 出的 Python 包管理器,Rust 写的,官方口号「比 pip 快 10 到 100 倍」。跑完我的结论是:快是真的,但这个快有条件,第一次用反而比 pip 慢。
31 MB 一个 exe,不依赖 Python
装完之后 Scripts\uv.exe 是 31,899,952 字节,约 31 MB。它不是 Python 包,是一个独立二进制,所以可以用在没装 Python 的机器上。
uv.exe 31,899,952 字节
uv 版本 0.13.5 (46776a95d 2026-10-21)
构建目标 x86_64-pc-windows-msvc
这 31 MB 换来的是全套自足:下载解释器 / 解析依赖 / 管虚拟环境,三件事它自己干,不需要 pip 也不需要预装 Python。
建一个虚拟环境,0.25 秒
传统做法是 python -m venv,要跑几秒。uv 的命令是 uv venv,实测 0.25 秒。
uv venv D:\test-env
→ 0.25 秒
它建出来的目录结构和标准 venv 一样,activate 脚本、Scripts 目录都在,现有工具链不用改习惯。
冷启动反而比 pip 慢一倍
这一段最反直觉。同一个环境,同一批 5 个包(requests 与 flask 与 click 与 rich 与 httpx),第一次跑:
| 工具 | 耗时 | 说明 |
|---|---|---|
| uv(首次) | 29.26 秒 | 要下依赖索引、建本地缓存 |
| pip(首次) | 13.69 秒 | 复用之前装包留下的缓存 |
uv 慢了 2.1 倍。原因不是 uv 本身慢,是两者起点不同:pip 的缓存是我前面装 rich / httpie 时攒下来的,uv 这是第一次跑,等于从零开始。所以「uv 比 pip 快 10 倍」这个说法在全新机器上不成立。
缓存热了,反过来快 2.4 倍
再跑两次,缓存已经有了:
| 工具 | 第 1 次 | 第 2 次 | 相对 |
|---|---|---|---|
| uv | 6.97 秒 | 8.26 秒 | 基准 |
| pip | 17.72 秒 | — | 慢 2.1 到 2.5 倍 |
到这里只能说快两倍多,跟官方的 10 倍差得远。继续查才发现真正的原因。安装时它打了一行警告:
warning: Failed to hardlink files; falling back to full copy.
If the cache and target directories are on different filesystems,
hardlinking may not be supported.
Installed 12 packages in 1.82s
硬链接失败了。uv 的缓存默认在 %LOCALAPPDATA%\uv(C 盘),我的虚拟环境在 D 盘,跨文件系统就退化成「完整复制」,跟 pip 干的事一样。
把缓存挪到同一个盘,差 11 倍
设一个环境变量把缓存指到 D 盘,同样的两个包再装一次:
set UV_CACHE_DIR=D://wb_cache//uv-cache
uv pip install requests flask
Resolved 12 packages in 45ms
Installed 12 packages in 165ms
| 场景 | 安装耗时 | 说明 |
|---|---|---|
| 跨盘 + 缓存热 | 1.82 秒 | 硬链接失败,走完整复制 |
| 同盘 + 缓存热 | 0.165 秒 | 硬链接生效 |
| 倍数 | 11 倍 | 仅因缓存位置不同 |
这就是「快 10 倍」的真实前提:缓存和目标 venv 必须在同一个文件系统上。跨盘的话,uv 只剩解析依赖比 pip 快,装文件这一段落不到好处。
已装过的环境再来一遍是 0.17 秒,也是同一个原因(全部走硬链接,不复制文件)。
已装过的环境再来一遍,0.17 秒
这个数字才叫夸张。同一个虚拟环境,把刚才那 5 个包再装一遍:
uv pip install requests flask click rich httpx
→ 0.17 秒
因为它不复制文件,直接从全局缓存硬链接到 venv 里。装已经在缓存中的东西,几乎零成本。对 CI 和「删了环境重建」这类场景,收益最大。
它还能自己装 Python
uv python list 会列出所有可下载的解释器版本,从 3.16.0a1 一路到 3.14.9,包括 free-threaded 版本:
uv python list
cpython-3.16.0a1-windows-x86_64-none <download available>
cpython-3.15.1-windows-x86_64-none <download available>
cpython-3.14.9+freethreaded-windows-x86_64-none <download available>
新机器上不用先装 Python,装 uv 就够。uv python install 3.12 直接拉一个下来,uv run 还能按脚本头部的注释自动准备依赖。
其他常用命令:uv pip sync 按 requirements 精确对齐环境,多装一个就删掉;uv tool install 装命令行工具并隔离;uvx 临时跑一个工具不落地。
什么时候不该用它
如果你在用的包里有需要编译的 C 扩展,且官方没提供 Windows wheel,uv 仍然会去找编译器,这一步和 pip 一样会失败,只是失败得更快。
它对 requirements.txt 的支持是兼容的,但对老项目里的 setup.py develop、pip install -e . 这类用法,行为细节和 pip 有差异,遇到奇怪的构建脚本时建议先用 pip 验证一遍。
还有一点:它的缓存目录默认在系统盘(Windows 是 %LOCALAPPDATA%\uv),缓存会长到几个 GB,机器 C 盘紧张的话要用 UV_CACHE_DIR 挪走。
没测的部分列一下,4 项:uv pip sync 的精确对齐 / uvx 临时运行 / 私有源与认证 / 在 CI 里的实际耗时。









