uv 本机实测:装 33 个 Python 包,pip 9.8 秒,uv 0.9 秒(Linux)

7 阅读4分钟

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 热缓存)

场景pipuv
冷缓存(缓存目录刚清空)9752 ms906 ms
热缓存(新 venv,缓存已有)8885 ms176 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

几个观察:

  1. 冷缓存约 10.8 倍。这个差距含网络因素,本机带宽不错;网差的环境两者都会变慢,倍数不一定一样。
  2. 热缓存才是 uv 拉开差距的地方:约 50 倍。pip 有缓存也只省下载,解压、安装、编译 .pyc 还得重做,所以 8.9 秒几乎没变;uv 从全局缓存用硬链接/复制直接铺进 venv,0.18 秒。
  3. 对 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 就能跑,这是我觉得最实用的一点。


踩坑与注意

  1. uv venv 里没有 pip。习惯 source .venv/bin/activate && pip install 的会发现 pip 找不到,要么用 uv pip install,要么 uv venv --seed。
  2. uv pip 不是 pip 的完全复刻,大部分常用参数兼容,但个别选项行为不同,迁移老脚本时先在小项目试。
  3. 计时自己测时注意缓存位置。我第一轮没隔离 pip 缓存,结果“冷”的 pip 其实用了 ~/.cache/pip 的东西;本文数据来自隔离缓存后的第二轮。
  4. 默认不编译 .pyc,所以 venv 小、装得快,但首次 import 会略慢;生产镜像建议 --compile-bytecode。
  5. 单次测量,有网络抖动;数量级结论稳定,小数点后的差别别较真。

结论

项目结果
建 venv1613 ms → 115 ms
33 个包冷缓存安装9752 ms → 906 ms(≈10.8×)
热缓存安装8885 ms → 176 ms(≈50×)
已装好 no-op20 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 写脚本。有问题评论区见,看到都会回。