How do I detect the Python version at runtime?
我有一个python文件,它可能必须支持python版本<3.x和>=3.x。有没有一种方法来内省python运行时,以了解它正在运行的版本(例如,
当然,看看
例如,要检查您是否正在运行python3.x,请使用
1 2 3 | import sys if sys.version_info[0] < 3: raise Exception("Must be using Python 3") |
这里,
在python 2.7及更高版本中,也可以通过名称访问
另请参阅如何在使用新语言功能的程序中检查Python版本?
尝试此代码,应该可以:
1 2 | import platform print(platform.python_version()) |
根据sys.hexversion和api和abi版本:
1 2 3 | import sys if sys.hexversion >= 0x3000000: print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion)) |
最佳解决方案取决于有多少代码是不兼容的。如果有很多地方需要支持python 2和3,那么
但是,比使用很多
1 2 3 4 5 6 7 8 9 10 | 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网站/
干杯
为了防止您想以人类可读的形式查看所有血腥的细节,您可以使用:
1 2 3 | import platform; print(platform.sys.version); |
系统输出:
1 2 | 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0] |
一些非常详细但可以机器处理的东西是从
1 2 3 | import platform; print(platform.sys.version_info) |
我的系统上的输出:
1 | sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0) |
下面是我在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) " % (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兼容,我使用:
1 2 3 | from sys import version_info if version_info[0] < 3: from __future__ import print_function |
因为您所感兴趣的只是您是否有python 2或3,有点黑客,但绝对是最简单和100%的工作方式,如下所示:
python_version_major = 3/2*2
下面的版本检查示例。
请注意,我不会停止执行,此代码段只是:
-如果精确版本匹配,则不执行任何操作
-如果版本(最后一个数字)不同,则写入信息
-如果任何一个大调+小调不同,则写警告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import sys import warnings def checkVersion(): # Checking Python version: expect_major = 2 expect_minor = 7 expect_rev = 14 if sys.version_info[:3] != (expect_major, expect_minor, expect_rev): print("INFO: Script developed and tested with Python" + str(expect_major) +"." + str(expect_minor) +"." + str(expect_rev)) current_version = str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]) if sys.version_info[:2] != (expect_major, expect_minor): warnings.warn("Current Python version was unexpected: Python" + current_version) else: print(" Current version is different: Python" + current_version) |