uv:用 Rust 重写的 Python 包管理器
uv:用 Rust 重写的 Python 包管理器
Python 生态的包管理长期处于多工具并存的状态。pip 负责安装,virtualenv 负责隔离,poetry 负责项目配置,pyenv 负责版本切换,pipx 负责工具运行。每个工具各司其职,但组合使用时命令和配置分散,新手上手需要一段时间。
Astral 团队推出的 uv 试图改变这种局面。这是一个用 Rust 从零编写的 Python 包和项目管理工具,目标是把 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 的功能统一到一个命令里。项目在 GitHub 上已获得 85959 颗 star。

速度是 uv 最突出的特性。官方 benchmark 表明,在依赖安装场景下,uv 比 pip 快 10 到 100 倍。warm cache 状态下安装依赖,uv 能在毫秒级完成,而 pip 需要数秒。这得益于 Rust 的底层性能以及全局缓存设计,同一个包在多个项目间只存储一份,通过硬链接共享,大幅节省磁盘空间。
项目管理是 uv 的核心场景。uv init 初始化一个新项目,自动生成 pyproject.toml 和基本的目录结构。uv add ruff 添加依赖时会自动创建虚拟环境,解析并安装传递依赖,整个过程通常在几百毫秒内完成。uv run 直接在当前项目环境里运行命令,不需要手动激活虚拟环境。uv lock 生成跨平台的 lockfile,记录每个依赖的精确版本和哈希值,uv sync 则按照 lockfile 将环境恢复到一致状态。对于大型代码库,uv 支持 Cargo 风格的 workspace,多个子项目可以共享依赖解析结果。
脚本管理是另一个实用功能。单文件 Python 脚本可以通过注释声明依赖,uv add --script example.py requests 自动在脚本顶部插入 PEP 723 格式的依赖元数据,uv run example.py 读取这些元数据,创建临时环境并运行脚本。这省去了为一个小脚本单独维护 requirements.txt 的麻烦。
Python 版本管理上,uv python install 3.12 3.13 3.14 可以同时安装多个版本,uv python pin 3.11 在当前目录创建 .python-version 文件锁定版本,后续 uv run 会自动使用这个版本。也支持 uv run --python pypy@3.8 临时切换解释器。
工具运行方面,uvx pycowsay 在一次性环境里运行工具,用完即销毁。uv tool install ruff 把工具装到独立的持久化环境,安装后的可执行文件直接加入 PATH,和全局 pip install 的效果类似,但不会在系统 site-packages 里留下任何痕迹。
对于不想改变现有工作流的用户,uv 提供了 uv pip 子命令,接口和 pip 完全一致。uv pip install、uv pip compile、uv pip sync 可以直接替换原有命令,同时获得性能提升。uv venv 也兼容 virtualenv 的用法。
安装 uv 只需要一行命令。macOS 和 Linux 用 curl,Windows 用 PowerShell,也可以通过 pip 或 pipx 安装。安装后 uv self update 可以自动升级到最新版本。

uv 的依赖解析器基于 PubGrub 算法实现,Git 相关逻辑参考了 Cargo 的设计。Astral 团队此前还开发了 Ruff,一个同样用 Rust 编写的高速 Python linter,在社区获得了广泛认可。uv 延续了相同的技术路线。
从实际使用来看,uv 适合两类场景:一是希望简化工具链的 Python 开发者,二是 CI/CD 等对安装速度敏感的自动化流程。它把分散在多个工具里的职责收拢到一个统一接口下,同时保留了向后兼容的迁移路径。
责收拢到一个统一接口下,同时保留了向后兼容的迁移路径。
更多推荐
所有评论(0)