uv:一个命令取代 pip 与 venv
Python 环境管理是每个开发者绕不开的痛点:pip 装包慢、venv 建环境繁琐、pyenv 管版本、poetry 锁依赖,四套工具各管一摊。uv 把这一切压缩进一个 Rust 二进制。这个项目来自 Astral 团队(Ruff 的开发商),当前 88,394 stars,已经成为 Python 工具链的事实标准之一。
它是什么
uv 是一个用 Rust 写的 Python 包管理器与项目管理器,一条命令覆盖 pip、venv、pyenv、pip-tools、poetry 的核心职能。它不依赖系统 Python 环境,自带 Python 版本下载与管理能力。安装后,一个 uv run 就能把依赖装好、把脚本跑起来。
三个最惊艳的功能
速度是首要卖点。 uv 的依赖解析与安装全部走 Rust 实现,配合全局缓存和并发下载,官方基准测试显示安装速度比 pip 快 10 到 100 倍。日常感受最明显的是锁依赖:pip 解析一个中型项目的依赖树需要几十秒,uv 通常在 1 秒内完成。
统一工具链。 过去建一个项目要依次调用 python -m venv .venv、pip install -r requirements.txt、pip freeze > requirements.lock。uv 用 uv init、uv add、uv lock、uv sync 四步完成同等工作,且全部围绕 pyproject.toml 一个文件。执行 uv add requests 会自动更新 pyproject.toml 和锁文件,不需要手动同步。
自动管理 Python 版本。 uv python install 3.12 下载独立解释器,uv run 时自动寻找或下载 pyproject.toml 声明的版本。系统 Python 是 3.11 的项目,切到 3.12 只需要改一行声明,不需要碰系统环境。
白物集实际怎么用的
白物集的 Python 脚本(知识湖增量更新、记忆同步、知识废弃清理)全部通过 uv run python3 执行。以知识湖增量更新为例,cron 每 6 小时跑一次 uv run python3 knowledge-lake.py --incremental --sync,uv 负责在每次运行前确认依赖就绪,脚本本身不关心环境细节。
这背后有一个真实的约束:开发机的系统 Python 是 PEP 668 externally-managed 环境,直接 pip install 会被拒绝(externally-managed-environment 错误),全局 pip 在这台机器上不可用。uv 的做法是创建项目级 .venv,依赖装在隔离环境里,系统 Python 完全不动。这个约束反而让脚本环境更干净:每个项目一个隔离环境,删掉 .venv 即可整体重置。
依赖解析速度在 cron 场景里很关键。定时任务如果每次运行都花几十秒解析依赖,日志里全是等待。uv 的全局缓存让重复解析几乎零成本,脚本启动时间基本等于 Python 解释器启动时间。
适合什么场景
- 个人 Python 项目与脚本环境管理,替代 pip + venv + pyenv 的组合
- CI 流水线:uv 提供官方 GitHub Action,缓存命中后安装依赖只需几秒
- 需要快速切换 Python 版本(3.10 到 3.13)的本地开发
- 已有 requirements.txt 的项目:uv 兼容 pip 语法,
uv pip install -r requirements.txt直接可用
不适合的场景:重度科学计算栈,numpy、scipy 的预编译轮子依赖系统库,conda 的二进制管理仍然更省心;团队协作中已经深度绑定 poetry 工作流的项目,迁移成本大于收益,不必强换。
快速上手
安装(macOS / Linux):
curl -LsSf https://astral.sh/uv/install.sh | sh
建环境并跑脚本:
uv venv # 创建 .venv
uv pip install requests # 安装依赖
uv run python3 script.py # 在环境中运行
管理 Python 版本:
uv python install 3.12
uv python pin 3.12 # 写入 .python-version
从安装到跑起第一个脚本,全程不超过 1 分钟。对比传统 pip 流程,省掉的不只是命令数量,还有每次等待解析依赖的时间。uv 值得放进每个 Python 开发者的工具链第一梯队。