有一个python代码,应该支持Python 3,但可能会也可能不会在Python 2.7中运行。 例如,此代码段可以在Python 2.7和Python 3中运行。 即使代码在Python 2.7上正常运行,在严格模式下强制执行和推荐Python 3兼容性的标准方法是什么?
print('This file works in both')
print('How to throw an exception,and suggest recommendation of python 3 only ?')
Python 2.7:https://ideone.com/bGnbvd
Python 3.5:https://ideone.com/yrTi3p
可能有多个hacks和exception,它们在Python 3中运行,而不是在Python 2.7中,可用于实现此目的。 我正在寻找文件/模块/项目开头的最佳推荐方法。
答案 0 :(得分:9)
如果它是一个包含setup.py
的正确Python包,您可以使用以下几种方法:
如果您的项目仅在某些Python版本上运行,则将
python_requires
参数设置为相应的PEP 440版本说明符字符串将阻止pip在其他Python版本上安装项目。
示例:python_requires='>=3',
由于最近添加了对python_requires
分类器的支持,因此您应该考虑使用旧版pip
和setuptools
安装您的软件包的用户。在这种情况下,您可以查看setup.py
文件sys.version_info
中的like Django does:
import sys
CURRENT_PYTHON = sys.version_info[:2]
REQUIRED_PYTHON = (3, 5)
# This check and everything above must remain compatible with Python 2.7.
if CURRENT_PYTHON < REQUIRED_PYTHON:
sys.stderr.write("""...""")
sys.exit(1)
Programming Language
Python version classifiers:
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3 :: Only',
并且,作为奖励,如果包是通过PyPI包索引分发的,python_requires
和其他分类符将显示在package home page上。
答案 1 :(得分:7)
您只需查看sys.version_info
:
import sys
if sys.version_info[0] < 3:
raise SystemExit("Use Python 3 (or higher) only")