我可以定义一个依赖于同一个包中的另一个额外包的额外包吗?

问题描述

我正在构建一个小的 Python 包,为此我已经配置了几个 extras;在我的 setup.cfg 中,我有以下内容

[options.extras_require]
test =
    coverage>=5,<6
    pytest>=6,<7
    pytest-cov>=2.8.1,<3
lint =
    Flake8

这很好用;我可以在我的包目录中执行 pip install .pip install .[test]pip install .[lint]pip install .[test,lint],它会安装正确的东西。

现在,我想创建一个新的附加程序 dev,以便 pip install .[dev] 意味着安装 testlint 附加程序。这可能吗?怎么样?

我试过例如

dev =
    .[test]
    .[lint]

但这会导致解析器错误。我还尝试在依赖项列表中显式引用我的包名称而不是 .,但随后它开始从 PyPI 下载旧版本而不是使用当前目录。

解决方法

使用interpolation

[options.extras_require]
test =
  coverage>=5,<6
  pytest>=6,<7
  pytest-cov>=2.8.1,<3
lint =
  flake8
dev =
  %(test)s
  %(lint)s