uv 的核心不是“加速 pip”,而是用 Rust 重写整个依赖生命周期——解析、下载、校验、安装、缓存,全部并行化且无 GIL 阻塞;其依赖解析采用 PubGrub 算法(与 Dart/Composer 同源),基于约束求解一次收敛,避免 pip 回溯发散,对含 50+ 间接依赖的项目解析极快。

uv 的核心不是“加速 pip”,而是用 Rust 重写了整个依赖生命周期——解析、下载、校验、安装、缓存,全部并行化且无 GIL 阻塞。
依赖解析用 PubGrub,不是 pip 的回溯算法
pip 在遇到冲突依赖时会反复回溯尝试,越复杂的 pyproject.toml 越容易卡住;uv 使用 PubGrub 解析器(和 Dart/Composer 同源),基于约束求解,一次收敛出满足所有条件的版本组合。它默认启用“最小版本优先”策略,避免过度升级引发意外兼容问题。
- 对含 50+ 间接依赖的项目,uv 解析耗时通常
-
uv lock生成的uv.lock是跨平台、跨 Python 版本的,而 pip-tools 的requirements.txt默认绑定当前平台 - 不支持
--pre或--prerelease时,uv 默认跳过预发布包;需显式加--prerelease=allow
安装过程拆成三阶段并行执行
uv 把传统串行流程打散为:元数据获取 → wheel 下载与哈希校验 → 环境写入,三者可重叠进行。每个阶段都默认使用 --jobs(默认值 = CPU 核心数 × 2),且支持中断恢复。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 下载阶段优先选
manylinux或universalwheel,没 wheel 才 fallback 到 sdist 编译(此时仍用 Rust 缓存编译产物) - 校验失败时会报具体 hash 不匹配,并指出是哪个包、哪个文件、预期/实际值——不像 pip 只报 “hash mismatch” 模糊错误
- 写入环境时直接硬链接或复制到
.venv/Lib/site-packages,不调用pip install子进程,无解释器启动开销
全局缓存设计决定复用效率
uv 的缓存路径是 ~/.cache/uv(Windows 为 %LOCALAPPDATA%\uv\cache),结构按 包名/版本/平台/Python版本/构建标签 分层存储,同一 wheel 在不同项目中只存一份。
立即学习“Python免费学习笔记(深入)”;
- 执行
uv sync时,若缓存中已有对应 wheel,跳过下载和校验,直接链接进虚拟环境 -
uv cache clean可按包名、日期或大小清理,但不会误删正在使用的条目 - 私有源(如 Nexus、Artifactory)的包也进同一缓存,只是目录名带哈希前缀,不影响复用逻辑
真正容易被忽略的是:uv 的“快”不只靠 Rust,更依赖它对 Python 包生态的重新建模——比如把 pyproject.toml 中 [project.optional-dependencies] 和 [tool.uv.sources] 当作一等公民解析,而不是像 pip 那样后期 patch。这意味着你改一行配置,uv 能精准识别影响范围,而非全量重算。

















