【问题标题】:Python package requirements: Usage of version specifiers == and >=Python 包要求:版本说明符 == 和 >= 的使用
【发布时间】:2015-12-17 06:58:03
【问题描述】:

我正在寻找关于 python 包中 pip 的需求文件中的版本规范的最佳实践、注意事项。

假设一个依赖于其他模块的 python 包。其中大多数都需要最低版本。至少维护者知道代码至少可以工作,例如六个 1.7

现在,可以用不同的方式定义需求:

  • six>=1.7.0该软件已经用这个版本测试过,估计以后的版本也会用到
  • six==1.7.0 我们需要确切的版本,包已经过测试。该软件尚未针对该模块的所有未来版本进行测试,因此我们不能保证它适用于这些版本。
  • six==1.9.0 我们只是用最新版本测试它并需要它。

我确实不愿要求确切的版本,因为它可能会破坏其他软件包的要求,并且对我来说似乎是不好的做法。另一方面,该包并没有在1.7.0以上的所有版本中进行测试。

关于软件包版本要求和==>= 的使用是否有任何指南?

【问题讨论】:

  • 保留两个版本:一个指定最低要求 >= 并且仅包含直接依赖项(手写),另一个使用针对所有 3rd 方包自动生成的精确测试版本(pip-compile )
  • 所以我应该建议尽可能安装确切的版本,并且还需要最小版本?推荐的确切版本可以放在pip -r 的需求文件中。但是最低要求怎么处理,放到setuptools的install_requires里?
  • 不同的用例可能需要不同的解决方案;它不是“非此即彼”:为自己使用确切的版本,以启用可重现的环境。您无法控制在其他环境中可能提供哪些版本——除非您必须(即,如果您知道它在特定版本之前不起作用),否则不要设置任何限制,例如,设身处地为发行版的包维护者:了解(例如,通过访问 CI 站点)测试 1.9.0 的确切版本可能很有用,但最好是您的包支持当前/未来的稳定版本,即 six>=1.7 可以。
  • 你介意把这个写成答案吗?否则我会自己做,但我认为你的评论基本上就是答案。
  • 这是一个很大的话题,评论只是触及表面。您更了解您的特定用例。如果您认为自己找到了解决方案,您可以发布自己的答案 — it is explicitly encouraged

标签: python pip version python-module requirements.txt


【解决方案1】:

根据我作为开发人员、打包人员(分发包维护人员)和软件维护人员的经验,我得出以下解释/建议:

  • install_requires:pkg_resources 在运行时 (!) 检查 install_requires 中列出的依赖项。它们是硬依赖。它们可以(应该?)包含所需的最低版本号,但不是确切的版本,除非给出很好的理由。更多受支持的版本通常更有用,最大版本数通常是一场噩梦。
  • extras_requires 列出可选要求(建议),这些要求对于核心功能来说不是必需的,但对于一些附加功能来说,或者是可选的,以增强功能。如果一个软件没有它就不能正常工作,它应该去 install_requires。
  • requirements.txt 一些维护者将其设置为与 install_requires 相同,而另一些则根本不使用它。它可用于推荐经过最佳测试的特定版本的需求。这当然对于打包完全没有用,但对于 virtualenvs 和类似的设置。

打包程序通常不使用 requirements.txt 中的信息,而是使用 install_requires 和 extras_requires 中的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2016-04-22
    • 2020-09-05
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2014-07-28
    相关资源
    最近更新 更多