首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种标准的方法来声明旧的python版本不受支持?

有没有一种标准的方法来声明旧的python版本不受支持?
EN

Stack Overflow用户
提问于 2014-10-18 15:44:54
回答 3查看 1.6K关注 0票数 10

我想正式放弃对我维护的程序的python2支持,并充分利用python3的特性。我不想让程序在python2下或多或少地工作,但在某些情况下会出现奇怪的行为而失败,我想在python2上正式中断我的程序,并给出一个明确的“请使用python3代替”的错误消息。对于不支持的python版本,最合理的失败方式是什么?

例如,我希望在Python2(至少是顶级包)中导入代码以触发错误,并且在尝试为Python2安装或构建它时(即使通过python3 setup.py sdist_dsc --with-python2等Python3调用),我的distutils setup.py脚本也会出错。我还想包括任何相关的元数据,以正式声明我支持哪些python版本。在PEP 345中有一个Requires-Python字段,但如果我不使用distutils2,我认为这无关紧要。

EN

回答 3

Stack Overflow用户

发布于 2014-10-18 15:52:54

从setuptools 24.2.0 (2016-07-20)和pip 9.0.0 (2016-11-02)开始,setup.pysetup()python_requires参数将告诉打包工具不要安装与说明符不匹配的包。例如,要仅支持Python 3.6+:

代码语言:javascript
复制
setup(
    ...
    python_requires=">=3.6",
    ...
)

只支持Python2.7和3.4+:

代码语言:javascript
复制
setup(
    ...
    python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
    ...
)

考虑到内置支持,此答案中的以下方法不应再使用。

要防止导入,请将以下内容放在模块的顶部:

代码语言:javascript
复制
import sys

if sys.version_info[0] < 3:
    raise ImportError('Python < 3 is unsupported.')

要防止安装,请将此代码放在setup.py的顶部

代码语言:javascript
复制
import sys

if sys.version_info[0] < 3:
    sys.exit('Python < 3 is unsupported.')

如果您使用与Python 2不兼容的语法,这也将在检查之前失败,因为模块将在运行之前被解析。检测到这可能是对“不支持Python 2”的支持的夸大。

但我还没有在实践中看到这一点。大多数维护人员只会说支持什么,而不会检查。

票数 9
EN

Stack Overflow用户

发布于 2014-10-18 16:18:48

标准方法是在setup.py中设置classifiers

代码语言:javascript
复制
if sys.version_info < (3, 3):
    sys.exit("error: this script requires Python 3.3 or greater.")

setup(...,
classifiers=[
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        # ... other non-version info
    ],
    ...)

例如,tulip project (asyncio) supports only Python 3.3

您还可以在包中添加__init__.py

代码语言:javascript
复制
if sys.version_info < (3, 3):
    raise ImportError("Python 3.3 or greater is required")
票数 3
EN

Stack Overflow用户

发布于 2014-10-19 01:23:00

我会使用this answer,但是我会抛出一个异常:

代码语言:javascript
复制
import sys

if sys.version_info[0] < 3:
    raise ImportError('Only Python 3 is supported.')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26437467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档