uv sync --extra dev命令解读--extra dev

uv sync --extra dev根据项目锁文件(uv.lock)同步项目环境,并在同步时包含名为 dev 的额外依赖组(Extra)。


1. 核心组成部分解读

uv sync

这是 uv 用于环境同步的核心命令。它的工作方式类似于 poetry installpdm sync

  • 它会检查你当前的虚拟环境(.venv)。
  • 对比 uv.lock 文件,确保虚拟环境中安装的包与锁文件完全一致
  • 双向同步:如果锁文件里有某个包而你环境里没有,它会安装;如果你的环境里多了某些手动安装的包,它会将其卸载,以保证环境的纯净和一致性

--extra dev (或 -E dev)

在 Python 选项中,extra(额外依赖)通常在 pyproject.toml 中定义。

  • 默认情况下,uv sync 只会安装项目的核心运行依赖dependencies)。
  • 加上 --extra dev,就是告诉 uv:“除了核心依赖外,把我在 dev 组里定义的开发依赖(比如 pytest, black, flake8 等)也一并安装/同步进来。”

2. 配置示例

为了让这个命令生效,你的 pyproject.toml 文件中通常会有类似下面的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
[project]
name = "my-awesome-project"
version = "0.1.0"
dependencies = [
"requests>=2.31.0", # 核心依赖
]

[project.optional-dependencies]
dev = [
"pytest>=8.0.0", # 开发依赖
"black>=24.0.0",
]

当你运行 uv sync --extra dev 时,uv 会同时安装 requestspytestblack


3. 进阶用法与对比

3.1区分 --extra--dev

uv 中,由于其设计演进,处理开发依赖有两种常见姿势:

命令 适用场景 对应 pyproject.toml 字段
uv sync --extra dev 传统的 PEP 508 / PEP 621 标准可选依赖。 [project.optional-dependencies]
uv sync --dev uv 专有的、更现代的开发依赖定义方式。 [tool.uv.dependency-groups] (PEP 735)

提示:如果你的项目使用的是比较新的 uv 版本,并且依赖定义在 [tool.uv.dependency-groups] 下,你应该直接使用 uv sync(默认会包含开发依赖)或者 uv sync --group dev。而 --extra 主要用于标准的兼容性。

3.2实用参数组合

  • 如果你想引入多个额外依赖组:
1
uv sync --extra dev --extra docs
  • 如果你只想安装核心依赖,排除所有额外/开发依赖:
1
uv sync --no-dev