【问题标题】:Python setup config install_requires "good practices"Python setup config install_requires “良好实践”
【发布时间】:2020-12-16 15:17:11
【问题描述】:

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

问题是,关于 setup() 函数或 setup.cfg 文件的 install_requires 参数,提及 每个 使用的包是否是一个好习惯,即使是 python 内置的包比如os比如?

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

谢谢

【问题讨论】:

  • 感谢大家的回答,现在已经很清楚了!

标签: python setuptools setup.py


【解决方案1】:

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

例如,这将声明numpyscipy 的最低版本,但允许scikit-learn 的任何版本:

setup(
  # ...
  install_requires=["numpy>=1.13.3", "scipy>=0.19.1", "scikit-learn"]
)

ossys 等包是 Python 标准库的一部分,因此不应包含在内。

正如@sinoroc 提到的,只有direct 3rd 方依赖应该在这里声明。 Dependencies-of-your-dependencies 是自动处理的。 (如scikit-learn依赖joblib,需要前者时,安装后者)。


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

【讨论】:

  • 我认为添加(在大多数情况下)仅应列出 直接 3rd 方依赖项非常重要。
  • 对于像我这样试图找出哪些依赖项是“非标准库要求”的其他 python 新手:这是标准库的列表:docs.python.org/3/library我希望有一个工具可以只需扫描您的代码并自动生成 install_requires 依赖项。
【解决方案2】:

install_requires 应仅提及标准库未预打包的包。

如果您担心由于 Python 版本控制可能不包含某些包,您可以指定您的包需要大于或等于 X 的 Python 版本。

注意:打包 python 包是一件出了名的麻烦事。

我建议你看看pyproject.toml,这些可以像任何普通软件包一样被 pip 安装,并被一些更现代的工具使用,如poetry

【讨论】:

  • PEP 631 与今天无关。我所知道的任何工具都没有实现它。
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2011-03-09
    • 2015-06-09
    • 2018-12-02
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多