跳至内容

uv

uv 是 Astral 公司用 Rust 编写的新一代 Python 包与项目管理工具,目标是用一个工具替代 pippip-toolsvenvpipxpoetrypyenv 等一堆分散的工具。它的依赖解析和安装速度比传统工具快一到两个数量级,并且自带 Python 版本管理能力,是目前社区推荐的默认起点。

安装

# Linux / macOS
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows PowerShell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# 也可以用 pipx 安装
pipx install uv

Python 版本管理

uv 内置了 Python 解释器的下载与管理,不需要额外安装 pyenv:

# 安装指定的 Python 版本(会自动下载)
uv python install 3.12 3.13

# 查看已安装 / 可安装的版本
uv python list
uv python list --only-installed

# 为当前目录固定一个 Python 版本,生成 .python-version 文件
uv python pin 3.12

快速创建虚拟环境(pip 兼容模式)

如果只是想要一个类似 venv 的轻量虚拟环境,uv venvpython -m venv 的高速替代品:

# 创建虚拟环境,可指定 Python 版本(不存在会自动下载)
uv venv --python 3.12.0

# 激活方式与 venv 完全一致
source .venv/bin/activate

# 用 uv 加速 pip 安装(兼容 pip 命令行)
uv pip install requests
uv pip install -r requirements.txt

项目模式(推荐):pyproject.toml + 锁文件

对于正式项目,更推荐使用 uv 的项目管理模式,用 pyproject.toml 声明依赖、用 uv.lock 锁定版本,保证团队和 CI 环境安装出完全一致的依赖树:

# 初始化一个新项目,生成 pyproject.toml 等标准结构
uv init example
cd example

# 添加依赖:自动更新 pyproject.toml,解析并写入 uv.lock,安装到 .venv
uv add ruff

# 添加仅开发环境需要的依赖(写入 dependency-groups.dev)
uv add --dev pytest

# 移除依赖
uv remove ruff

# 在项目虚拟环境中运行命令,无需手动 activate
uv run pytest

# 根据 pyproject.toml 重新解析生成锁文件
uv lock

# 根据锁文件精确同步 .venv(保证环境与 uv.lock 完全一致)
uv sync

# 查看依赖树
uv tree

uv.lock 会锁定包括间接依赖在内的精确版本和哈希值,相比 requirements.txt 提供了真正的可重复构建保证——这也是 uv 项目模式与 venv+pip 最大的区别。

直接运行脚本(内联依赖声明)

对于单文件脚本,uv 支持在文件头部用注释声明依赖,uv run 会自动创建临时环境并安装依赖后执行:

uv add --script example.py requests
# example.py
# /// script
# dependencies = ["requests"]
# ///
import requests
print(requests.get("https://astral.sh").status_code)
uv run example.py   # 自动解析 dependencies 并执行,无需手动建环境
uv 用 uv add/uv remove 替代 poetry add、用 uv python install/pin 替代 pyenv、用 uv run --with 替代 pipx run,一个工具覆盖了 Python 生态里过去需要五六个独立工具才能完成的工作,因此现在是新项目的默认推荐。
最后更新于