跳转至

Uv

简介

uv 是一个 python 的 包管理项目管理器。然而这只是官方说法,实际上 uv 的功能更多,比如 工具管理运行时管理 等功能 uv 也是有的

对比

uv 相比 pip 有很多不同

  • uv 的功能比 pip 丰富很多。uv 自称是可以替代 pip/pipx/poetry/pyenv/twine/virtualenv 等工具的单一工具。
  • uv 使用 Rust 实现,所以速度更快。

安装

# Windows
scoop install uv

使用

项目管理

uv 自称为项目管理器,因此有项目管理的功能

# 新建项目
uv init example
# 可以指定 python 版本
uv init example --python 3.13
# 进入项目
cd example
# 在项目环境中运行脚本或命令,不需要先激活环境
uv run main.py
uv run -- mkdocs serve
# 更新锁文件
uv lock
# 同步项目环境,即一键往虚拟环境里安装所有的依赖
uv sync

uv runuv lockuv sync 等命令都会自动创建虚拟环境,也可以通过 uv venv 手动创建。.python-version 中的 python 版本会用来创建虚拟环境,因此在创建环境前需要注意一下。

uv 在 .venv 目录中存放虚拟环境,有 uv.lock 作为锁文件,pyproject.toml 作为项目文件。这些都让 uv 有了强大的项目管理功能

包管理

uv 还自称是包管理器,因此也有包管理的功能

这种包管理通常会和项目管理结合,用来处理项目的依赖

# 添加依赖
uv add mkdocs
# 移除依赖
uv remove mkdocs
# 查看依赖树
uv tree

工具管理

uv 还可以安装和运行工具

uvx ruff
# 等效的命令
uv tool run ruff

uvx 会把工具安装到临时的隔离环境中。如果需要把工具添加为项目依赖,应该使用 uv run

运行时管理

uv 还有管理运行时版本的功能

# 下载 python 3.12
uv python install 3.12
# 固定项目使用的版本为 3.12
uv python pin 3.12

默认情况下,uv 会在缺失 python 版本时自动尝试下载。我个人更喜欢使用专门的 运行时版本管理器 来做这件事,比如 mise。可以往配置文件中添加如下内容禁用这个特性

python-downloads = "never" # 永远不会下载
python-downloads = "manual" # 只能通过 uv python install 来下载

在 Windows 上,这个配置文件的位置比较诡异,放在了 $env:APPDATA\uv\uv.toml;而 macOS 和 Linux 一般都是 ~/.config/uv/uv.toml