前言
uv 是一个用 Rust 编写的高速 Python 包解析器和安装器,旨在作为 pip 和 pip-tools 工作流的现代化替代品。它由 Astral 公司开发,该公司同时也是高性能 Python 代码格式化工具 Ruff 的幕后团队。
简单来说,uv 是一个集多种功能于一身的强大工具
一,简介
主要功能:
- 安装依赖(替代 pip)
- 管理虚拟环境(替代 venv 或 virtualenv)
- 锁定依赖版本(替代 pip-tools 的 pip-compile)
- 运行项目(类似 pipx 或 poetry run)
最大的特点就是极致的速度和一体化的体验。
为什么需要 uv?它解决了什么问题?
传统的 Python 包管理工具链(如 pip + venv)虽然功能强大,但也存在一些痛点:
- 速度慢:pip 的依赖解析和安装过程,尤其是在处理大型项目时,可能非常耗时。
- 工具链碎片化:开发者通常需要组合使用多个工具(venv, pip, pip-tools, pipx, requirements.txt 等)来完成工作,流程繁琐。
- 用户体验不一致:不同工具的命令和配置方式各不相同,学习成本较高。
uv 旨在通过一个单一、高速的工具来解决所有这些问题。
核心特性
极速:得益于 Rust 的高性能实现和先进的缓存策略,uv 在依赖解析和安装速度上比传统工具快 10-100 倍。
跨平台:支持 macOS, Linux 和 Windows。
替代多款工具:一个 uv 命令可以完成 pip, virtualenv, pip-tools, pipx 等工具的工作。
强大的解析器:内置一个快速的依赖解析器,能快速处理复杂的依赖关系。
与现有生态兼容:完全支持 requirements.txt 和 pyproject.toml 文件,可以无缝集成到现有项目中。
Python 管理:可以自动下载并管理多个版本的 Python 解释器(类似 pyenv)。
安装
非常简单,通常只需一行命令:
macOS 和 Linux:1
curl -LsSf https://astral.sh/uv/install.sh | sh
安装后,重启终端或运行 source ~/.bashrc(或其他 shell 的配置文件)即可。
Windows (PowerShell):1
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
使用 pip (不推荐,但可行):1
pip install uv
二,基本使用
2.1 替换pip
1 | # 安装单个包 |
2.2 管理虚拟环境
1 | # 在当前目录创建虚拟环境 (.venv) |
2.3 项目依赖管理 (类似 pip-tools)
这是 uv 非常强大的一个功能,可以帮你生成精确的、锁定的依赖文件。
假设你有一个 pyproject.toml 文件,或者一个简单的 requirements.in 文件。
1 | # 1. 生成一个锁定的 requirements.txt 文件 |
2.4 运行项目 (类似 pipx)
你可以直接用 uv run 来运行一个已安装的 Python 应用,而无需手动激活环境。
1 | # 安装一个应用(如 black)到独立的虚拟环境中并运行它 |
三,对比其他模块
uv 与 Poetry / PDM 的对比
特性 | uv | Poetry | PDM |
---|---|---|---|
核心定位 | 高速的底层安装器/解析器 | 全功能的项目管理和打包工具 | 现代化的Python包和依赖管理器 |
编程语言 | Rust | Python | Python |
配置文件 | 主要使用 requirements.txt 和标准 pyproject.toml |
主要使用 pyproject.toml (自定义 [tool.poetry] 章节) |
主要使用 pyproject.toml (PEP 621标准) |
依赖管理 | 支持 requirements.txt 和 pyproject.toml |
强大的依赖解析和版本管理 | 支持PEP 621,依赖解析能力强 |
虚拟环境 | 内置,极速创建和管理 | 内置管理 | 内置管理,支持自动激活 |
打包发布 | 不支持(需用 flit , hatch 等) |
内置支持 | 内置支持 |
Python版本管理 | 支持(类似pyenv) | 不支持(需借助其他工具) | 支持 |
安装速度 | 极快(Rust实现) | 较快 | 较快 |
理念 | 做更快的”基础工具”,与现有生态兼容 | 提供一体化的解决方案 | 遵循Python标准,现代化工作流 |
锁文件 | requirements.txt 或自定义格式 |
poetry.lock |
pdm.lock |
CLI体验 | 简洁,命令类似传统工具 | 功能丰富,自成体系 | 直观,易于使用 |
uv 更像是一个“引擎”,它可以被其他工具使用(事实上,PDM 已经计划使用 uv 作为其后端)。而 Poetry 和 PDM 是“整车”,提供了从依赖管理到打包发布的全套服务。你可以选择用 uv 来增强传统工作流,或者选择 Poetry/PDM 来获得一体化的项目体验。
四,总结
如果你是初学者:uv 提供了一个非常快速和简单的起点来管理 Python 包和环境。从 uv venv 和 uv pip install 开始学起。
如果你厌倦了缓慢的 pip:强烈推荐尝试 uv,仅仅是作为 pip 的替代品,也能极大提升效率。
如果你在使用 requirements.txt 工作流:uv 的 pip compile 和 pip sync 命令是你的绝佳选择,速度远超 pip-tools。
如果你已经在用 Poetry 或 PDM:可以继续使用,它们提供了更丰富的功能。但可以关注 uv 的发展,未来它们可能会集成 uv 作为后端以提升速度。
总之,uv 是 Python 包管理领域一个令人兴奋的进步,它通过技术创新显著改善了开发者的体验,是目前最值得尝试的工具之一。
doc