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 次相对
uv6.97 秒8.26 秒基准
pip17.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 里的实际耗时。