uv 本机实测:装 33 个 Python 包,pip 9.8 秒,uv 0.9 秒(Linux)
Python 项目里最磨人的往往不是写代码,而是等依赖装完:新建 venv、pip install -r requirements.txt、CI 每次重来一遍。GitHub 上的 astral-sh/uv(Ruff 同一家团队,Rust 写的)号称比 pip 快 10~100 倍。这篇不复述 README,而是在本机 Linux 上用同一组常见包,把 venv 创建、冷/热缓存安装、uv run 单文件脚本都掐表跑了一遍。
本机实测 + AI 辅助整理。测量时间:2026-10-31(Asia/Shanghai)。原始输出见文末说明。
本机环境
OS: Linux x86_64
Python: 3.13.5
pip: 25.1.1
uv: 0.13.6 (x86_64-unknown-linux-gnu)
测试包(8 个顶层依赖,解析后共 33 个包,含 numpy / pandas 这类大轮子):
PK="requests flask pandas numpy httpx pydantic fastapi rich"
为了公平,pip 和 uv 的缓存都指到独立目录,测前清空:
export UV_CACHE_DIR=/tmp/uvcache PIP_CACHE_DIR=/tmp/pipcache
rm -rf $UV_CACHE_DIR $PIP_CACHE_DIR
安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh # 官方脚本
# 或
pip install uv / pipx install uv / brew install uv
uv --version
单个二进制,不依赖已有 Python 环境。
实测 1:创建虚拟环境
python3 -m venv a # 1613 ms
uv venv b # 115 ms
python3 -m venv 慢主要是要往 venv 里装一份 pip;uv venv 默认不装 pip,所以快一个数量级(约 14 倍)。
实测 2:装同一组包(冷缓存 vs 热缓存)
| 场景 | pip | uv |
|---|---|---|
| 冷缓存(缓存目录刚清空) | 9752 ms | 906 ms |
| 热缓存(新 venv,缓存已有) | 8885 ms | 176 ms |
| 已全部装好再跑一遍 | — | 20 ms |
a/bin/pip install $PK # 冷:9752 ms
d/bin/pip install $PK # 热:8885 ms
uv pip install --python b/bin/python $PK # 冷:906 ms
uv pip install --python c/bin/python $PK # 热:176 ms
几个观察:
- 冷缓存约 10.8 倍。这个差距含网络因素,本机带宽不错;网差的环境两者都会变慢,倍数不一定一样。
- 热缓存才是 uv 拉开差距的地方:约 50 倍。pip 有缓存也只省下载,解压、安装、编译 .pyc 还得重做,所以 8.9 秒几乎没变;uv 从全局缓存用硬链接/复制直接铺进 venv,0.18 秒。
- 对 CI、频繁重建 venv、多项目共享依赖的场景,第 2 点比第 1 点更重要。
磁盘占用(du -sh):pip 的 venv 205M,uv 的 venv 133M;缓存目录 pip 40M。差值主要是 pip 自身和预编译的 .pyc——uv 默认不编译字节码,首次 import 时才生成,需要的话加 --compile-bytecode。
实测 3:uv run 跑带依赖的单文件脚本
PEP 723 内联元数据,脚本自己声明依赖:
# /// script
# dependencies = ["requests","rich"]
# ///
import requests, rich
rich.print("[green]ok[/]", requests.__version__)
uv run s.py # 首次(缓存清空):508 ms,输出 "Installed 9 packages in 28ms"
uv run s.py # 第二次:186 ms
不用手动建 venv、不污染系统 Python,uv 自己建临时环境。写运维小脚本、给同事发一个 .py 就能跑,这是我觉得最实用的一点。
踩坑与注意
uv venv里没有 pip。习惯source .venv/bin/activate && pip install的会发现 pip 找不到,要么用uv pip install,要么uv venv --seed。uv pip不是 pip 的完全复刻,大部分常用参数兼容,但个别选项行为不同,迁移老脚本时先在小项目试。- 计时自己测时注意缓存位置。我第一轮没隔离 pip 缓存,结果“冷”的 pip 其实用了 ~/.cache/pip 的东西;本文数据来自隔离缓存后的第二轮。
- 默认不编译 .pyc,所以 venv 小、装得快,但首次 import 会略慢;生产镜像建议
--compile-bytecode。 - 单次测量,有网络抖动;数量级结论稳定,小数点后的差别别较真。
结论
| 项目 | 结果 |
|---|---|
| 建 venv | 1613 ms → 115 ms |
| 33 个包冷缓存安装 | 9752 ms → 906 ms(≈10.8×) |
| 热缓存安装 | 8885 ms → 176 ms(≈50×) |
| 已装好 no-op | 20 ms |
uv run 带依赖脚本 | 首次 508 ms,之后 186 ms |
如果你还在用 pip + venv,最低成本的尝鲜方式就是把 pip install 换成 uv pip install,其他不变;等习惯了再看 uv init / uv add / uv lock 那一套项目管理。
完整的测量脚本和进阶踩坑表以后会整理上架 Gumroad,先关注专栏「GitHub实测笔记」。
上一篇:rtk 本机实测(给 AI Agent 砍命令行噪音)。
下一篇预告:kellyjonbrazil/jc——把 ls/dig/ps 等命令输出转成 JSON,配合 jq 写脚本。有问题评论区见,看到都会回。