uv:重塑 Python 的依赖管理与项目初始化
uv
是一个用 Rust 编写的、极其快速的 Python 包管理器和项目工作流工具。 它由创建了广受欢迎的 Python 代码格式化工具 Ruff 的 Astral 团队打造,旨在成为统一的、高性能的 Python 工具链入口。
你可以把它理解为:pip
、venv
、pip-tools
、poetry
、pytest
等诸多工具的超高速替代品,并且它们被集成在了一个命令行工具里。
uv 的核心定位
它的目标是解决 Python 开发中长期存在的几个痛点:
工具链碎片化:项目可能同时使用
pip
、venv
、poetry
、pytest
等一堆工具,配置复杂。速度慢:尤其是
pip
在依赖解析和安装大型包时非常耗时。体验不一致:不同工具(如
pip
和poetry
)的命令和工作流不同,需要额外学习。
uv
试图通过一个单一工具,提供从项目创建到依赖管理、测试运行的一致且极速的体验。
主要特性与优势
1. 极致的速度
这是 uv
最引人注目的特点。由于其底层由 Rust 编写,并采用了先进的依赖解析算法和并行下载技术,它在几乎所有操作上都比传统工具快一个数量级。
依赖解析:比
pip
和poetry
快 10-100 倍。包安装:利用全局缓存和并行化,安装速度极快。
虚拟环境创建:几乎是瞬间完成。
2. 一体化的工具集
uv
用一个命令覆盖了开发工作流的多个环节:
包管理 (
uv pip
):完全兼容pip
命令,但速度更快。项目管理 (
uv run
,uv add
):类似于Poetry
,可以通过pyproject.toml
管理依赖和运行脚本。虚拟环境管理 (
uv venv
):快速创建和管理虚拟环境。锁文件生成 (
uv lock
):生成精确的、跨平台的依赖锁文件。运行脚本和工具 (
uv run
):可以直接运行pytest
、black
等工具,无需先激活虚拟环境。
3. 强大的兼容性
与现有生态无缝对接:
uv
完全遵守 Python 的打包标准(如pyproject.toml
),可以很好地与现有的pip
、setuptools
项目协作。替换而非颠覆:你可以逐步采用
uv
,比如先用uv pip
代替pip
,然后再用其项目管理功能。
安装
使用pip按照uv:
pip install uv
命令结束后,使uv --version
测试是否安装成功
环境管理
安装和管理 Python 版本
uv 可以轻松管理多个 Python 版本,无需额外安装 pyenv 等工具。
查看已安装的 Python 版本
# 查看 uv 管理的 Python 版本
uv python list
安装特定 Python 版本
# 安装特定版本
uv python install 3.11.5
# 安装最新版本
uv python install 3.12
# 安装预览版
uv python install 3.13.0-alpha.1
移除 Python 版本
# 移除特定版本
uv python uninstall 3.11.5
管理虚拟环境
基本创建
# 在当前目录创建 .venv 虚拟环境
uv venv
# 指定名称创建虚拟环境
uv venv myenv
# 指定路径创建虚拟环境
uv venv /path/to/venv
指定 Python 版本
# 使用特定 Python 版本创建
uv venv --python 3.11
# 使用精确版本
uv venv --python 3.11.5
# 使用系统 Python
uv venv --python system
使用虚拟环境
当你在项目目录中使用 uv run
时,如果不存在虚拟环境,uv
会自动创建 .venv
# 运行 Python 脚本
uv run python script.py
# 运行测试
uv run pytest
# 运行任何命令
uv run black .
uv run flask run
指定环境路径
# 使用特定虚拟环境运行命令
uv --with-venv /path/to/venv run python script.py
项目管理
初始化项目
使用如下创建一个新的 Python 项目
uv init my-project
cd my-project
或者在现有python项目中使用uv初始化项目,此时项目中会添加pyproject.toml
.python-version
文件。这些文件是uv所需要的管理依赖的文件
cd my-project
uv init
项目迁移
在项目迁移到其他环境时,不可避免得需要安装该项目所需要的包
如果项目只有requirements.txt
文件时,可以使用如下命令添加依赖包
uv pip install -r requirements.txt
对于已经有pyproject.toml
文件的项目,使用如下命令安装项目的依赖包
uv sync
当你在项目目录中使用 uv sync
时,如果不存在虚拟环境,uv
会自动创建 .venv
。如果不想要创.venv
,则可以使用如下命令安装依赖包
uv install
包管理
添加一个或多个依赖
# 添加一个包
uv add pandas
# 添加多个包(用空格隔开)
uv add requests pandas
添加特定版本的依赖
# 添加精确版本
uv add package==1.2.3
# 添加兼容版本
uv add package>=1.2.0
uv add package<=2.0.0
uv add package>1.0.0,<2.0.0
列举当前环境的包
uv pip list
移除当前环境的包
uv remove pandas
uv remove
会同时移pyproject.toml
文件中的依赖声明和环境中的包
更新当前环境的包
可以首先查看有哪些包可以升级
uv pip list --outdated
然后升级所需要的包
uv pip install --upgrade requests flask
pip 写法
uv也可以用pip写法,纯粹作为更快的pip使用
uv pip install numpy
uv pip uninstall numpy
高级用法
强制重新安装
# 强制重新安装包(先卸载再安装)
uv pip install --force-reinstall package-name
升级 pip 本身
# 升级 uv 的 pip 组件
uv pip install --upgrade pip
忽略已安装的包
# 忽略已安装的包,强制重新安装
uv pip install --ignore-installed package-name