【问题标题】:Python convention for specifying compatible interpreter versions?用于指定兼容解释器版本的 Python 约定?
【发布时间】:2016-11-17 21:03:53
【问题描述】:

__author____version__ 顶级模块变量类似,是否有任何约定可以为 Python 源文件指定支持的 Python 版本?

我的用例是一个项目,其中包含一些需要与 Python 2.4 兼容的脚本。我想以某种普遍认可的方式在他们身上指出这一事实。

我不是在问how to require a minimal Python version during execution。我的问题是开发人员可能会意外使用与此特定脚本需要支持的 python 版本不兼容的功能。 PyCharm 可以警告 Python 不兼容。如果它能够获取此注释并基于每个文件配置警告,那就太好了。

【问题讨论】:

  • 您可以执行类似import sys 的操作,然后sys.version[0:3] 将执行x.y,因此您可以对此进行测试。
  • 看看this question上的答案
  • 只是为了澄清:我想防止的问题不是有人使用错误版本运行脚本。我的问题是开发人员可能不小心使用了与此特定脚本需要支持的 python 版本不兼容的功能。

标签: python pycharm backwards-compatibility


【解决方案1】:

据我所知,在 Python 源文件中指定支持的 Python 版本没有约定。如果您正在制作 Python 库并通过 PyPI(和 pip)分发它,您可以添加说明它与哪些 Python 版本兼容的包元数据。

例如,对于我的scandir 模块,您可以在 PyPI 上看到它(当前)被标记为与 Python 2.6、2.7 和 3.2-3.5 兼容。该元数据位于包的setup.py 中的classifiers 关键字中:

setup(
    name='scandir',
    # ...
    classifiers=[
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.6',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.2',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        # ...
    ]
)

如果您不将此作为 PyPI 包发布,则一种替代方法可能是在旧版本的 Python 上导入模块时产生警告,指出此版本的 Python 不支持 FizzBu​​zz 功能。

import sys, warnings
if sys.version_info < (3, 5):
    warnings.warn('The FizzBuzz feature is only supported on Python 3.5+')

说了这么多,我个人只是保持简单:记录功能 X 仅在 Python 3.5+ 上受支持,然后如果有人尝试在旧版本上使用该功能,就让它失败 em>。

【讨论】:

  • 分类器对于文档目的很有用:它们告诉哪些 Python 版本应该工作(虽然这没有以任何方式验证,IIRC)。但是,它们不会阻止例如选择不再支持您的实际解释器的版本;例如对于 Python 2.7,选择了kitconcept.dsgvo 2.0.0,而 1.3.0 是最后一个与 2.7 兼容的版本。
猜你喜欢
  • 2015-11-13
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2010-11-18
相关资源
最近更新 更多