在运行时检测Python版本
我有一个Python文件,可能需要支持Python版本<3.x和> = 3.x. 有没有一种方法来反思Python运行时知道它正在运行的版本(例如, 2.6 or 3.2.x
)?
当然,看看sys.version
和sys.version_info
。
例如,要检查您是否正在运行Python 3.x,请使用
import sys if sys.version_info[0] < 3: raise "Must be using Python 3"
这里, sys.version_info[0]
是主版本号。 sys.version_info[1]
会给你次要的版本号。
在Python 2.7及更高版本中, sys.version_info
的组件也可以通过名称访问,所以主版本号是sys.version_info.major
。
另请参见如何在使用新语言function的程序中检查Python版本?
试试这个代码,这应该工作:
import platform print(platform.python_version())
根据sys.hexversion和API和ABI版本控制 :
import sys if sys.hexversion >= 0x3000000: print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion))
最好的解决scheme取决于多less代码不兼容。 如果你需要支持Python 2和3的地方有很多,那么就是兼容性模块。 six.PY2
和six.PY3
是两个布尔值,如果你想检查版本。
然而,比使用大量if
语句更好的解决scheme是尽可能使用six
兼容性函数。 假设,如果Python 3000有下一个新的语法,有人可以更新six
所以你的旧代码仍然可以工作。
import six #OK if six.PY2: x = it.next() # Python 2 syntax else: x = next(it) # Python 3 syntax #Better x = six.next(it)
干杯
以下是我使用sys.version_info
检查Python安装的一些代码:
def checkInstallation(rv): currentVersion = sys.version_info if currentVersion[0] == rv[0] and currentVersion[1] >= rv[1]: pass else: sys.stderr.write( "[%s] - Error: Your Python interpreter must be %d.%d or greater (within major version %d)\n" % (sys.argv[0], rv[0], rv[1], rv[0]) ) sys.exit(-1) return 0 ... # Calling the 'checkInstallation' function checks if Python is >= 2.7 and < 3 requiredVersion = (2,7) checkInstallation( requiredVersion )
为了使脚本与Python2和3兼容,我使用:
from sys import version_info if version_info[0] < 3: from __future__ import print_function