setup.py/setup.cfg 安装所有附加功能

Dan*_*off 3 installation setuptools setup.py

我在 setup.cfg 中寻找“继承”其他附加功能的可能性,如下所示:

[options.extras_require]
all =
    <doc>
    <dev>
    <test>
doc =
    sphinx
dev =
    dvc
    twine  # for publishing
    <test>
test =
    flake8
    pytest
    pytest-cov
    coverage
    pytest-shutil
    pytest-virtualenv
    pytest-fixture-config
    pytest-xdist
Run Code Online (Sandbox Code Playgroud)

我希望通过运行来安装所有附加功能

pip install PACKAGE[all]
Run Code Online (Sandbox Code Playgroud)

sin*_*roc 7

我相信setuptools在解析文件时使用configparser'sBasicInterpolationsetup.cfg。因此,您可以利用这一点来执行以下操作:

[options.extras_require]
all =
    %(doc)s
    %(dev)s
    %(test)s
doc =
    sphinx
dev =
    dvc
    twine  # for publishing
    %(test)s
test =
    flake8
    pytest
    pytest-cov
    coverage
    pytest-shutil
    pytest-virtualenv
    pytest-fixture-config
    pytest-xdist
Run Code Online (Sandbox Code Playgroud)

构建sdist然后查看*.egg-info/requires.txt项目的文件以获取结果。由于test被包含在all两次中,一次是直接的,一次是通过 间接的,所以dev在 中会有一些重复all,但很可能这不是什么大问题。


理论上应该适用于所有构建后端和前端的另一个解决方案是“自依赖”:

[options.extras_require]
all =
    PROJECT[doc]
    PROJECT[dev]
    PROJECT[test]
doc =
    sphinx
dev =
    dvc
    twine  # for publishing
    PROJECT[test]
test =
    flake8
    pytest
    pytest-cov
    coverage
    pytest-shutil
    pytest-virtualenv
    pytest-fixture-config
    pytest-xdist
Run Code Online (Sandbox Code Playgroud)

参考