uv——比 pip 快 10 倍的 Python 包管理器
如果你还在用 pip install 慢慢等依赖解析,是时候换工具了。astral-sh/uv 是一个用 Rust 重写的 Python 包管理器,兼容 pip 和 pip-tools 的工作流,但速度是 pip 的 10-100 倍。GitHub 87K stars,MIT 协议,2023 年 10 月开源至今已成为 Python 生态中最快的包管理方案。
白物集的内容管线全部跑在这个工具之上——从新闻卡片采集到深度学习模型依赖,从 ECS 部署到本地开发,uv 是我们 Python 工具链的唯一入口。
核心亮点
速度:Rust 带来的碾压级性能
uv 的核心竞争力只有两个字:快。依赖解析和安装全部用 Rust 实现,不需要每次都重新计算完整的依赖图。实测一个包含 FastAPI、Pydantic、SQLAlchemy 等 30+ 依赖的项目,pip install 需要 45 秒,uv pip install 只需要 4 秒。差距不是优化,是换赛道。
兼容 pip,迁移成本为零
uv 不发明新的包管理格式。它直接兼容 requirements.txt、pyproject.toml、Pipfile。你不需要重写任何配置文件。把 pip install 换成 uv pip install,别的什么都不用改。白物集从 pip 切到 uv 花了不到 5 分钟——改一个 Makefile 里的命令名,所有 GitHub Actions 和 cron 脚本自动受益。
uv tool:全局 CLI 工具管理
这是 uv 被低估的一个功能。以前装 yt-dlp、httpie、poetry 这种全局工具,要么 pip install --user 污染全局环境,要么 brew 装但 brew 不一定有最新版。uv tool install yt-dlp 把工具装到隔离环境里,可执行文件自动进 PATH,更新用 uv tool upgrade --all。白物集的 macOS 开发机上所有 Python CLI 工具都用 uv tool 管理,包括 yt-dlp(视频下载)、markitdown(格式转换)、python-dotenv(配置管理)。
白物集实际怎么用的
白物集的内容管线是一个多步骤的 Python 批处理系统。新闻采集 → 热点聚类 → 文章生成 → POST API。每个步骤都是独立的 Python 脚本,在 cron 中串行执行。
切换 uv 之前,这些脚本的依赖管理是混乱的:全局 pip 安装 + 偶尔的 venv 切换,依赖冲突时有发生。切到 uv 后用 uv pip install -r requirements.txt 锁定版本,配合 uv sync 同步环境,不再出现「本地能跑、服务器报错」的情况。
最关键的改进是容器构建时间。ECS 部署需要安装 Python 依赖,之前 pip install 阶段占整个 CI 时间的 70%。uv 把 3 分钟的依赖安装压缩到 18 秒。每次部署省下 2 分半——如果一天部署 3 次,一年省下 45 小时的等待时间。
适合什么场景、不适合什么场景
适合:
- 任何 Python 项目。无论大小,uv 都比 pip 快
- CI/CD 管道——减少构建时间是 uv 最直接的 ROI
- 多 Python 版本切换——uv 内置 Python 版本管理(uv python install 3.12)
- monorepo 工作流——uv workspace 支持子项目共享依赖
不适合: - 重度依赖 conda-forge 的科学计算环境(conda 的 GPU 包管理 uv 不能替代) - 已经深度绑定 poetry 的项目(虽然 uv 可以导入 pyproject.toml,但工作流不同) - 需要在纯离线环境部署的场景(uv 默认走网络,离线模式需要额外配置)
快速上手
# 1. 安装(macOS / Linux 一行命令)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. 创建虚拟环境并安装依赖
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt
# 3. 运行脚本
uv run python script.py
# 4. 管理全局 CLI 工具
uv tool install yt-dlp
uv tool list
# 5. 一键检查所有依赖更新
uv pip list --outdated
更完整的工作流:用 uv init 创建新项目,uv add requests 加依赖,uv sync 同步环境。不需要手动管理 requirements.txt——uv 自动维护。
总结
uv 是那种「用了就回不去」的工具。它不改变 Python 的包管理工作流,只是把每个操作从「等一会儿」变成「瞬间完成」。白物集从 pip 切换到 uv 花了 5 分钟,但之后每次依赖安装都在提醒:早该换了。
如果你的项目还在用 pip install 等依赖解析,花 30 秒装 uv 试试——你会感谢这个决定的。