橦言无忌

一个不想改变世界的程序媛

uv in Python

前言

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
3
4
5
6
7
8
# 安装单个包
uv pip install requests

# 从 requirements.txt 安装
uv pip install -r requirements.txt

# 将依赖冻结到 requirements.txt
uv pip freeze > requirements.txt

2.2 管理虚拟环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 在当前目录创建虚拟环境 (.venv)
uv venv

# 指定目录创建虚拟环境
uv venv ./my-env

# 创建虚拟环境并同时安装依赖(一步到位)
uv venv --python 3.11

# 激活虚拟环境 (和传统方式一样)
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate

# 在虚拟环境中安装包
uv pip install pandas

2.3 项目依赖管理 (类似 pip-tools)

这是 uv 非常强大的一个功能,可以帮你生成精确的、锁定的依赖文件。

假设你有一个 pyproject.toml 文件,或者一个简单的 requirements.in 文件。

1
2
3
4
5
6
7
8
9
10
# 1. 生成一个锁定的 requirements.txt 文件
# 这类似于 `pip-compile requirements.in`
uv pip compile requirements.in -o requirements.txt

# 直接从 pyproject.toml 的 [project] 部分编译依赖
uv pip compile pyproject.toml -o requirements.txt

# 2. 根据锁定的文件安装,确保环境一致
# 这类似于 `pip-sync`
uv pip sync requirements.txt

2.4 运行项目 (类似 pipx)

你可以直接用 uv run 来运行一个已安装的 Python 应用,而无需手动激活环境。

1
2
3
4
5
6
# 安装一个应用(如 black)到独立的虚拟环境中并运行它
uvx black .

# 等价于:
# uv pip install black
# black .

三,对比其他模块

uv 与 Poetry / PDM 的对比

特性 uv Poetry PDM
核心定位 高速的底层安装器/解析器 全功能的项目管理和打包工具 现代化的Python包和依赖管理器
编程语言 Rust Python Python
配置文件 主要使用 requirements.txt 和标准 pyproject.toml 主要使用 pyproject.toml(自定义 [tool.poetry] 章节) 主要使用 pyproject.toml(PEP 621标准)
依赖管理 支持 requirements.txtpyproject.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

// 代码折叠