用于指定兼容解释器版本的Python约定?

时间:2016-11-17 21:03:53

标签: python pycharm backwards-compatibility

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

我的用例是一个项目,其中包含一些需要与Python 2.4兼容的脚本。我想用一些普遍可识别的方式注意它们中的事实。

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

1 个答案:

答案 0 :(得分:2)

我不知道在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上导入模块时,可能会产生一个警告,并说这个功能不支持FizzBu​​zz功能。 Python版本。

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

所有这一切,我个人只是保持简单:文档只支持Python 3.5+,然后如果有人试图在旧版本上使用该功能,只需让它失败