在运行时检测Python版本

我有一个Python文件,可能需要支持Python版本<3.x和> = 3.x. 有没有一种方法来反思Python运行时知道它正在运行的版本(例如, 2.6 or 3.2.x )?

当然,看看sys.versionsys.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.PY2six.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) 

http://pythonhosted.org/six/

干杯

以下是我使用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