Python安装配置install_requires“良好实践”

mrt*_*mrt 9 python setuptools setup.py

我在这里的问题可能看起来很天真,但我从未在网络资源上找到任何关于它的线索。

问题是,关于函数或文件install_requires的参数,提及每个使用的包是一个好习惯吗,甚至是Python内置的包,例如setup()setup.cfgos

人们可以假设任何 python 环境都有这些通用包,那么在设置中明确提及它们是否会出现问题,从而使其可能过于冗长?

谢谢

Ale*_*yes 9

install_requires应包括非标准库要求及其版本限制(根据需要)。

例如,这将声明numpy和的最小版本scipy,但允许任何版本scikit-learn

setup(
  # ...
  install_requires=["numpy>=1.13.3", "scipy>=0.19.1", "scikit-learn"]
)
Run Code Online (Sandbox Code Playgroud)

os诸如、之类的包sys是 Python 标准库的一部分,因此不应包含在内。

  • 正如 @sinoroc 提到的,这里只应声明直接的第 3 方依赖项。您的依赖项的依赖项会自动处理。(例如,scikit-learndepends joblib;当需要前者时,将安装后者)。
  • 这里列出了标准库包的列表:https://docs.python.org/3/library/

我发现阅读其他包并了解它们的setup.py文件是如何定义的很有帮助。


sin*_*roc 5

您应该列出顶级第 3 方依赖项

  • 不要列出 Python 标准库中的包和模块。

  • 请列出您的代码直接依赖的第 3 方依赖项,即包含以下内容的项目:

    • 您的代码导入的包和模块;
    • 您的代码直接调用的二进制文件(例如在子进程中)。
  • 不要列出依赖项的依赖项。