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 pandasuv remove会同时移pyproject.toml文件中的依赖声明和环境中的包
更新当前环境的包
可以首先查看有哪些包可以升级
uv pip list --outdated然后升级所需要的包
uv pip install --upgrade requests flaskpip 写法
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