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

Pip的pyproject.toml中可选依赖组能否依赖其他可选依赖组?

用pip实现可选依赖组的层级依赖方案

完全可以用pip实现,你遇到的问题是因为之前的写法错误导致拉取旧版本,用PEP 685定义的self语法就能解决,而且你的pip 23.0.1刚好支持这个特性。

正确配置方式

不用在依赖组里写my-package[chem]这种指向自身包名的写法,改用self[xxx]来引用当前包的其他可选依赖组,这样pip会直接解析本地的依赖关系,不会去私有仓库拉取旧版本。

示例pyproject.toml配置:

[project]
name = "my-package"
version = "1.0.0"

[project.optional-dependencies]
# 基础可选组
torch = ["torch>=2.0.0"]
# chem组依赖torch组
chem = ["self[torch]", "pymatgen>=2023.1.0"]
# test组依赖chem组
test = ["self[chem]", "pytest>=7.0.0", "pytest-cov>=4.0.0"]

效果验证

  • 执行pip install .[chem]时,pip会自动安装torch组和chem组的所有依赖,不需要用户手动加torch
  • 执行pip install .[test]时,会自动安装torch、chem、test三组的全部依赖,完全避免冗余

为什么之前的写法失效

你之前用my-package[torch]的写法,会让pip去私有仓库查找my-package的对应版本(而不是用当前本地正在安装的包),所以会拉到旧版本。而self是PEP 685专门为这种同一包内extra依赖场景定义的关键字,它明确告诉pip:引用的是当前包的其他可选依赖组,不需要远程拉取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:17