Python

uv:Astral 的全能 Python 包与项目管理器

uv 是一个用 Rust 编写的极速 Python 包与项目管理器,取代 pip、pipx、poetry、pyenv 和 virtualenv,性能快 10-100 倍。

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
uv:Astral 的全能 Python 包与项目管理器

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 与传统工具之间的性能差异在包管理的每个方面都相当显著。

操作pipPoetryuv加速倍数
安装 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 媲美。

功能uvPoetryPDMpip + venv
项目初始化uv initpoetry initpdm init手动
新增依赖uv addpoetry addpdm add手动编辑 + pip install
移除依赖uv removepoetry removepdm remove手动编辑
锁定文件uv.lockpoetry.lockpdm.lock无 (pip freeze)
版本管理uv python install需 pyenv需 pyenv需 pyenv
脚本/任务uv runpoetry runpdm run手动
构建/发布uv builduv publishpoetry buildpoetry publishpdm buildpdm publishbuild + twine

uv 的项目管理设计为直观易用,无论用户来自何种背景。uv add requests 既将依赖添加到 pyproject.toml 也安装它,就像 poetry 一样。uv sync 从锁定文件安装所有依赖。而 uv run 在项目的虚拟环境中执行命令,无需手动激活。


uv 如何处理 Python 版本管理?

Python 版本管理传统上由 pyenv 处理,这需要 shell 集成且配置可能很复杂。uv 将版本管理直接内置到工具中。

版本管理任务uv 命令传统工具传统命令
列出可用版本uv python listpyenvpyenv install --list
安装 Python 版本uv python install 3.12pyenvpyenv install 3.12
设置项目 Python 版本uv python pin 3.12pyenvpyenv local 3.12
查找当前 Pythonuv python findwhich/wherewhich python
使用特定 Pythonuv run --python 3.11pyenvpyenv 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 环境设计。其速度、确定性解析和内置缓存使其成为自动化构建管道的理想选择,在这种环境下每一秒都很重要。


延伸阅读

TAG
CATEGORIES