You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PEP 735之后,pyproject.toml中各类开发依赖应置于何处?

pyproject.toml 依赖配置权威规范指南(针对含原生扩展的Python项目)

针对你提到的四类依赖,结合最新PEP规范和uv工具特性,配置方案如下:

1. 运行时核心依赖(已安装包的依赖)

这类依赖是项目运行必须的,严格遵循PEP 621,直接放在[project.dependencies]中:

[project]
dependencies = [
  "imageio>=2.30.0",
  "httpx>=0.27.0"
]

2. 构建系统依赖(scikit-build-core、pybind11等)

根据PEP 518,构建阶段的依赖必须放在[build-system.requires]中,这是构建后端(如scikit-build-core)执行时的依赖集合。
关于重复安装的问题:

  • 如果pybind11仅作为构建依赖(仅用于编译扩展,运行时不需要),只在[build-system.requires]声明即可;
  • 如果它同时也是运行时依赖,在[project.dependencies]和[build-system.requires]都声明,uv会自动处理版本冲突并确保只安装一次兼容版本,无需手动去重。

示例配置:

[build-system]
requires = [
  "scikit-build-core>=0.7.0",
  "pybind11>=2.11.0"
]
build-backend = "scikit_build_core.build"

3. 测试环境依赖(pytest等)

PEP 735标准化的[dependency-groups]是当前最佳实践,uv对其中的dev组有特殊支持,比旧的[project.optional-dependencies]更清晰直观。
直接在[dependency-groups]下定义dev组,包含测试相关依赖:

[dependency-groups]
dev = [
  "pytest>=7.4.0",
  "pytest-cov>=4.1.0"
]

使用时执行uv sync --group dev,uv会自动将这些依赖安装到当前环境。如果需要兼容仅支持PEP 621的旧工具,可以同时保留[project.optional-dependencies]的配置,但优先推荐dependency-groups。

4. 隔离式开发工具(tbump、cmake、ruff等)

这类工具通常建议用pipx/uvx做隔离管理,避免污染项目环境,不需要写入项目核心依赖。但如果要统一团队使用的版本,可以:

  • 单独创建一个tools组放在[dependency-groups]中,方便成员按需安装:
[dependency-groups]
tools = [
  "tbump>=6.1.0",
  "ruff>=0.1.0"
]

成员可以通过uv sync --group tools安装到本地,或者直接用uvx临时运行(如uvx ruff check)。

  • 注意:cmake、ninja这类非Python工具,若有PyPI分发包(如cmake-python-distributions)可以这么配置;如果是系统级工具,建议在项目文档中说明安装方式,不要放入pyproject.toml。

内容的提问来源于stack exchange,提问作者Alex Reinking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:12:17