问题 setup.py中的extras_require()和install_requires()之间的区别?


我试图了解它们之间的区别 extras_require() 和 install_requires() 在setup.py但无法得到它。两者都用于安装Python依赖项,但它们之间的区别是什么?


12195
2017-12-21 17:46


起源



答案:


根据 setuptools文档

extras_require
  将“extras”(项目的可选功能)的名称映射到字符串或字符串列表的字典,指定必须安装哪些其他发行版才能支持这些功能。

install_requires
  字符串或字符串列表,指定在此时需要安装的其他发行版。

关于 声明“Extras”(具有自己的依赖项的可选功能) 详细说明:

有时,项目具有“推荐”的依赖关系,这对项目的所有使用都不是必需的。例如,如果安装了ReportLab,项目可能会提供可选的PDF输出,如果安装了docutils,则可能提供reStructuredText支持。这些可选功能称为“附加功能”,setuptools允许您定义其要求。通过这种方式,需要这些可选功能的其他项目可以通过在其中命名所需的附加功能来强制安装其他需求 install_requires

最大的不同在于要求 extras_require 仅根据需要安装:

这些要求不会自动安装,除非另一个包依赖于它们(直接或间接),方法是在相关项目名称后面的方括号中包含所需的“额外”。 (或者,如果附加内容列在EasyInstall命令行的需求规范中。)

总结一下:

  • 如果依赖是 必要 运行你的项目,把它放进去 install_requires。它们将始终安装。
  • 如果你的项目有 可选功能 添加依赖项,将这些依赖项放入其中 extras_require。那些依赖会  安装,除非用户或其他包调用该功能。

8
2017-07-11 19:57





我不确定官方用法,但我用 extras_require() 指定条件依赖项。

就我而言 -

extras_require={":python_version<'3.5'": ["scandir"]}

从理论上讲,这应该可以通过 install_requires() 本身,但它只能起作用它应该开始版本X.XX(几个声称哪个版本开始正确)的 setuptools

这篇文章解释得很好: 条件Python依赖项


3
2017-07-11 19:06



“版本X.XX”是“至少版本 20.5“或者甚至”至少“ v36.2.0“据我所知。 - Josh


答案:


根据 setuptools文档

extras_require
  将“extras”(项目的可选功能)的名称映射到字符串或字符串列表的字典,指定必须安装哪些其他发行版才能支持这些功能。

install_requires
  字符串或字符串列表,指定在此时需要安装的其他发行版。

关于 声明“Extras”(具有自己的依赖项的可选功能) 详细说明:

有时,项目具有“推荐”的依赖关系,这对项目的所有使用都不是必需的。例如,如果安装了ReportLab,项目可能会提供可选的PDF输出,如果安装了docutils,则可能提供reStructuredText支持。这些可选功能称为“附加功能”,setuptools允许您定义其要求。通过这种方式,需要这些可选功能的其他项目可以通过在其中命名所需的附加功能来强制安装其他需求 install_requires

最大的不同在于要求 extras_require 仅根据需要安装:

这些要求不会自动安装,除非另一个包依赖于它们(直接或间接),方法是在相关项目名称后面的方括号中包含所需的“额外”。 (或者,如果附加内容列在EasyInstall命令行的需求规范中。)

总结一下:

  • 如果依赖是 必要 运行你的项目,把它放进去 install_requires。它们将始终安装。
  • 如果你的项目有 可选功能 添加依赖项,将这些依赖项放入其中 extras_require。那些依赖会  安装,除非用户或其他包调用该功能。

8
2017-07-11 19:57





我不确定官方用法,但我用 extras_require() 指定条件依赖项。

就我而言 -

extras_require={":python_version<'3.5'": ["scandir"]}

从理论上讲,这应该可以通过 install_requires() 本身,但它只能起作用它应该开始版本X.XX(几个声称哪个版本开始正确)的 setuptools

这篇文章解释得很好: 条件Python依赖项


3
2017-07-11 19:06



“版本X.XX”是“至少版本 20.5“或者甚至”至少“ v36.2.0“据我所知。 - Josh