distutils/pip中的可选依赖项

Mik*_*per 27 python distutils pip

在安装我的python包时,我希望能够告诉用户各种可选的依赖项.理想情况下,我还想打印一条关于这些可选要求的信息以及它们各自的要求.

在pip或docutils的文档中我还没有看到任何东西.这些工具是否支持可选的依赖项?

Tob*_*obu 23

这些被称为额外,这是如何在您的setup.py中使用它们.

基本支持位于pkg_resources中.您需要启用分发setup.py.pip也会理解他们:

pip install 'package[extras]'
Run Code Online (Sandbox Code Playgroud)

  • 是否有标准化的方法来查看哪些附加功能可用? (8认同)

Jak*_*aas 13

自 PEP-621 起,此信息最好放置在 pyproject.toml 中,而不是 setup.py 中。这是PEP 621的相关规范。以下是 pyproject.toml 中的示例片段(感谢@GwynBleidD):

[project.optional-dependencies]
test = [
  "pytest < 5.0.0",
  "pytest-cov[all]"
]
lint = [
  "black",
  "flake8"
]
ci = [
  "pytest < 5.0.0",
  "pytest-cov[all]",
  "black",
  "flake8"
]
Run Code Online (Sandbox Code Playgroud)

更完整的示例可以在 PEP 中找到

  • 然后,您可以使用“pip install .[test]”或“pip install your_package[lint]”来安装它们 (11认同)

Agu*_*ina 9

是的,由@Tobu 声明并在此处解释。在您的setup.py文件中,您可以添加如下一行:

extras_require = {
        'full': ['matplotlib', 'tensorflow', 'numpy', 'tikzplotlib']
    }
Run Code Online (Sandbox Code Playgroud)

这里有这行的一个例子。

现在,您可以通过 PIP basic/vanilla 包pip install package_name或具有所有可选依赖项的包进行安装,例如pip install package_name[full]

package_name您的包的名称在哪里,full因为我们在extras_require字典中添加了“完整”,但这取决于您输入的名称。


如果有人对如何编写一个可以使用或不使用包的库感兴趣,我推荐这个答案