【问题标题】:Enforcing python version in setup.py在 setup.py 中强制执行 python 版本
【发布时间】:2013-11-01 07:52:57
【问题描述】:

目前,我们通过在setup.py 属性下的setup.py 中提及它们的版本和依赖关系,在系统上设置\安装一些包。我们的系统需要 Python 2.7。有时,用户在他们的系统上有多个版本的 Python,比如 2.6.x 和 2.7,它说一些包已经可用,但实际上在 2.6 站点包列表下可用的系统上。还有一些用户只有 2.6,如何从 setup.py 强制执行,或者有任何其他方式可以说只有 Python 2.7 并且我们希望 setup.py 更新的所有软件包仅适用于 2.7。我们需要至少 2.7 的机器来运行我们的代码。

谢谢! 桑托什

【问题讨论】:

    标签: python python-2.7 setuptools


    【解决方案1】:

    当前的最佳实践(截至 2018 年 3 月撰写本文时)是在 setup.py 中的 setup() 调用中直接添加 python_requires 参数:

    from setuptools import setup
    
    [...]
    
    setup(name="my_package_name",
          python_requires='>3.5.2',
          [...]
    

    请注意,这需要 setuptools>=24.2.0 和 pip>=9.0.0; see the documentation 了解更多信息。

    【讨论】:

    • 在我看来应该是官方的答案。一方面,它描述了当前的最佳实践,另一方面,它描述了可能的限制并列出了版本信息。这是最好的答案。
    • 上述答案中链接的文档似乎没有关于 python_requires 关键字的任何信息 - packaging.python.org/guides/…(同一组文档的一部分)更直接地描述了它
    • 谢谢@PeterBriggs,更新了链接(不确定是不是一开始就错了,还是页面移动了……)
    • 我有 pip 19.0.3、setuptools 41.0.1 和 python 3.6.8。我添加了 `python_requires='>3.7' 并且 pip 仍然很乐意安装该软件包,但我认为它应该出错,因为我的 Python 版本太低。还需要什么?
    • 我将python_requires 添加到我的 setup.py 中,但它根本不起作用。带有if 的版本看起来很难看,但据我所见,它更可靠。
    【解决方案2】:

    由于setup.py 文件是通过pip 安装的(并且pip 本身由python 解释器运行),因此无法在setup.py 文件中指定要使用的Python 版本。

    请查看this answersetup.py: restrict the allowable version of the python interpreter,它有一个基本的解决方法来停止安装。

    在你的情况下,代码是:

    import sys
    if sys.version_info < (2,7):
        sys.exit('Sorry, Python < 2.7 is not supported')
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 2016-01-24
      • 2019-12-09
      • 1970-01-01
      • 2020-04-19
      • 2013-10-13
      • 2021-11-09
      • 2012-12-05
      相关资源
      最近更新 更多