
Hacker News 8 月 31 日热门第一是 astral-sh/uv 的一条 PR:把 wheel cache 做去重,让多项目共用同一份包。uv 本身已经够快(比 pip 快 10-100 倍),加上这个改动,多项目开发体验再上一个台阶。本文教你在 5 分钟内给现有 Python 项目接入 uv。
uv 是 Astral 公司用 Rust 写的 Python 包管理工具,目标是把 pip、pip-tools、pipx、poetry、pyenv、virtualenv 全部合并成一个二进制。它通过 wheel 缓存、全局包索引、并行下载把安装速度从分钟级压到秒级。一个 50 个依赖的 Django 项目,传统 pip 要 90 秒,uv 不到 5 秒。
二、第一步:安装 uv
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或者用 Homebrew
brew install uv
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
装完后重启终端,uv --version 验证。
三、第二步:初始化或迁移项目
新项目:
mkdir myproject && cd myproject
uv init
uv add fastapi uvicorn
uv run python main.py
老项目(有 requirements.txt):
cd myproject
uv venv
uv pip install -r requirements.txt
uv pip 兼容所有 pip 命令,但底层用了 Rust 写的解析器和缓存。装过的包会留在 ~/.cache/uv/,下一个项目直接复用。
四、第三步:开启 wheel cache 去重
8 月 31 日合并的 PR(#21327)让 uv 在多项目场景下自动去重 wheel 文件。默认开启,不需要配置。验证方法:
uv cache dir
# 输出类似:/home/ubuntu/.cache/uv
du -sh $(uv cache dir)
# 装过多项目后,这个数字会明显小于 pip 缓存
五、常见失败处理
1. command not found: uv:终端没识别 PATH,重启终端或 source ~/.cargo/env。
2. 依赖冲突报错:uv 比 pip 严格,能识别 pip 漏掉的版本冲突。解决方法是用 uv lock 生成 lockfile,或在 pyproject.toml 里放宽版本约束。
3. 用了 conda 环境:uv 当前不直接管 conda 环境的包,但可以在 conda 环境里用 uv pip install 加速。
六、uv 的核心架构
uv 用 Rust 写,底层逻辑跟 Rust 生态的 Cargo 类似:先解析所有依赖,生成 lockfile,再并行下载 wheel 文件,最后做"硬链接安装"——所有项目共享同一份 wheel 缓存。这跟 pip 的"每个虚拟环境独立下载"形成鲜明对比,也是它快的根本原因。
ASTRAL 公司创始人 Charles Guo 之前在 Python 核心团队工作,做过 pip 性能优化。uv 的设计吸收了 pip、poetry、pdm、rye 的优点,目标是"一个工具替代所有"。
七、uv 的六大能力
1. 包管理(替代 pip):快 10-100 倍
2. 项目管理(替代 poetry、pdm):自动管理 pyproject.toml
3. 虚拟环境(替代 virtualenv、venv):自动激活
4. Python 版本管理(替代 pyenv):一行 uv python install 3.12
5. 工具管理(替代 pipx):uv tool install black 隔离工具
6. 单文件脚本:uv run script.py 自动建环境
八、为什么 HN 这次 PR 重要
8 月 31 日合并的 wheel cache dedup PR(#21327)解决了多项目场景下 uv cache 占用过大的问题。PR 前,每个项目的 venv 都要下载一份 wheel;PR 后,uv 自动识别同名 wheel 复用同一份磁盘文件。开发者实测:5 个 Django 项目从 12GB 缓存降到 3.8GB 缓存,效果明显。
九、更多实战命令
# 看缓存里有什么
uv cache ls
# 清理没用的缓存
uv cache prune
# 把现有 requirements.txt 升级成 pyproject.toml
uv add -r requirements.txt
# 在 CI 中加速
uv sync --frozen --no-dev
十、常见失败处理(补充)
4. 在公司代理内:设置 UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/(国内)或自建 devpi。
5. 跨平台 lockfile:uv lock --universal 可以生成跨平台的 lockfile,方便 monorepo 多人协作。
6. 私有 PyPI 源:uv add mypackage --index-url https://my-pypi.example.com/simple/ 临时指定。
十一、迁移到 uv 的路径
如果你现在用 pip + requirements.txt:直接装 uv,命令换成 uv pip install 即可,所有 requirements.txt 文件继续可用。
以上就是“3步用uv给你的Python项目装上加速器:装依赖快10倍”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14475/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料