Python 的包生态系统长期以来分散在多个工具之间。需要安装包?用 pip。需要隔离环境?用 venv 或 virtualenv。需要依赖管理?用 Poetry 或 Pipenv。需要不同 Python 版本?用 pyenv。需要安装 CLI 工具?用 pipx。uv 将整个工具链收纳到一个单一的、极速的 Rust 二进制文件中,处理所有 Python 包工作流程。
由 Astral 创建——也就是 Ruff 检查器和 Ty 类型检查器的同一团队——uv 代表了他们对统一 Python 工具链愿景的顶峰。uv 用 Rust 编写并针对速度进行了优化,它以单个、一致的命令行界面取代了 pip、pipx、poetry、pyenv 和 virtualenv 的功能,执行速度比它所取代的工具快 10 到 100 倍。
对开发者体验的影响是巨大的。安装数百个依赖包——pip 需要几分钟来解析和下载——uv 在几秒钟内完成。为不同项目创建全新环境几乎是即时的。而用单一工具管理 Python 版本、虚拟环境和项目依赖的能力,消除了历来困扰 Python 项目设置的配置开销。
uv 如何统合 Python 工具链?
uv 的架构建立在一个洞察之上:Python 包工具共享基本操作——下载包、解析依赖、管理环境——而一个单一的优化实现可以胜过一组独立工具的集合。
graph LR
A[uv CLI] --> B[包安装器]
A --> C[依赖解析器]
A --> D[环境管理器]
A --> E[项目管理器]
A --> F[Python 版本管理器]
A --> G[工具安装器]
B --> H[包注册中心\nPyPI / 自定义索引]
C --> H
D --> I[虚拟环境]
E --> J[项目配置]
F --> K[Python 下载]
G --> I
uv 中的每个子命令都对应到一个熟悉的工具:uv pip install 取代 pip,uv venv 取代 virtualenv,uv python install 取代 pyenv,uv tool install 取代 pipx,而 uv init / uv add 取代 poetry 的项目管理。但与这些独立工具不同,uv 在所有操作之间共享一个共同的缓存、解析器和执行引擎。
uv 与传统 Python 包工具相比如何?
uv 与传统工具之间的性能差异在包管理的每个方面都相当显著。
| 操作 | pip | Poetry | uv | 加速倍数 |
|---|---|---|---|---|
| 安装 100 个包 | 45-90 秒 | 60-120 秒 | 1-3 秒 | 30-50 倍 |
| 解析依赖 | 30-60 秒 | 45-90 秒 | 0.5-2 秒 | 60-100 倍 |
| 创建虚拟环境 | 2-5 秒 | 3-8 秒 | <0.1 秒 | 50 倍以上 |
| 从锁定文件安装 | 30-45 秒 | 40-60 秒 | 0.5-1 秒 | 60-80 倍 |
| 安装单个包 | 1-3 秒 | 2-5 秒 | <0.1 秒 | 20 倍以上 |
| 锁定文件生成 | 30-60 秒 | 45-90 秒 | 0.5-2 秒 | 60-100 倍 |
这些基准测试假设暖缓存。冷安装(首次,无缓存)仍然比 pip 快 5-10 倍,这得益于并行下载、优化的 HTTP 处理和更快的 wheel 构建器。
uv 提供哪些项目管理功能?
除了包安装之外,uv 还提供完整的项目管理工作流程,可与 Poetry 和 PDM 媲美。
| 功能 | uv | Poetry | PDM | pip + venv |
|---|---|---|---|---|
| 项目初始化 | uv init | poetry init | pdm init | 手动 |
| 新增依赖 | uv add | poetry add | pdm add | 手动编辑 + pip install |
| 移除依赖 | uv remove | poetry remove | pdm remove | 手动编辑 |
| 锁定文件 | uv.lock | poetry.lock | pdm.lock | 无 (pip freeze) |
| 版本管理 | uv python install | 需 pyenv | 需 pyenv | 需 pyenv |
| 脚本/任务 | uv run | poetry run | pdm run | 手动 |
| 构建/发布 | uv build、uv publish | poetry build、poetry publish | pdm build、pdm publish | build + twine |
uv 的项目管理设计为直观易用,无论用户来自何种背景。uv add requests 既将依赖添加到 pyproject.toml 也安装它,就像 poetry 一样。uv sync 从锁定文件安装所有依赖。而 uv run 在项目的虚拟环境中执行命令,无需手动激活。
uv 如何处理 Python 版本管理?
Python 版本管理传统上由 pyenv 处理,这需要 shell 集成且配置可能很复杂。uv 将版本管理直接内置到工具中。
| 版本管理任务 | uv 命令 | 传统工具 | 传统命令 |
|---|---|---|---|
| 列出可用版本 | uv python list | pyenv | pyenv install --list |
| 安装 Python 版本 | uv python install 3.12 | pyenv | pyenv install 3.12 |
| 设置项目 Python 版本 | uv python pin 3.12 | pyenv | pyenv local 3.12 |
| 查找当前 Python | uv python find | which/where | which python |
| 使用特定 Python | uv run --python 3.11 | pyenv | pyenv shell 3.11 |
uv 从 Astral Python Build Standalone 项目下载预构建的 Python 二进制文件,该项目为所有主要平台提供优化的 Python 构建。这消除了从源代码编译 Python 的需求(如 pyenv 的默认方式),并大大加快了 Python 版本管理的速度。
FAQ
什么是 uv? uv 是 Astral 用 Rust 编写的极速 Python 包与项目管理器。它将 pip、pipx、poetry、pyenv 和 virtualenv 的功能统一到一个工具中,性能快 10-100 倍。
uv 如何达到如此快的速度? uv 使用 Rust 编写,采用积极的缓存、并行下载和优化的依赖解析。它并行下载包、广泛地磁盘缓存,并使用 SAT 求解器进行依赖解析。
uv 能完全取代 pip 吗? 可以,uv 设计为 pip 的直接替代品。它支持 pip 的命令行界面、需求文件、可编辑安装和所有标准 pip 工作流程,但执行速度快 10-100 倍。
uv 支持虚拟环境管理吗? 是的,uv 提供类似 virtualenv 和 pyenv 的内置虚拟环境管理。它可以创建、激活和管理不同 Python 版本和依赖集的环境。
uv 适合生产环境的 CI/CD 吗? 是的,uv 特别为 CI/CD 环境设计。其速度、确定性解析和内置缓存使其成为自动化构建管道的理想选择,在这种环境下每一秒都很重要。
延伸阅读
- uv GitHub 仓库 – 源代码、文档和问题追踪器
- Astral (Ruff) – uv、Ruff 和 Ty 背后的公司
- Python 包用户指南 – 官方 Python 包文档
- PEP 621 – 在 pyproject.toml 中存储项目元数据 – uv 用于项目配置的标准
- Python Build Standalone – uv 下载的预构建 Python 发行版
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!