我有一个Python文件,它可能必须支持Python版本< 3。X和>= 3.x。是否有一种方法可以内省Python运行时以了解它正在运行的版本(例如,2.6或3.2.x)?
当前回答
最佳解决方案取决于有多少代码是不兼容的。如果有很多地方需要支持Python 2和3,那么6就是兼容性模块。六。PY2和6。如果您想检查版本,PY3是两个布尔值。
然而,比使用大量if语句更好的解决方案是尽可能使用六个兼容性函数。假设,如果Python 3000有一个新的语法next,有人可以更新6,所以你的旧代码仍然可以工作。
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/
其他回答
版本检查示例如下。 注意,我没有停止执行,这段代码只是: -如果精确版本匹配,什么都不做 -如果修订(最后一个数字)不同,则写入INFO -如果major+minor不一致,则写入WARN
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)
最佳解决方案取决于有多少代码是不兼容的。如果有很多地方需要支持Python 2和3,那么6就是兼容性模块。六。PY2和6。如果您想检查版本,PY3是两个布尔值。
然而,比使用大量if语句更好的解决方案是尽可能使用六个兼容性函数。假设,如果Python 3000有一个新的语法next,有人可以更新6,所以你的旧代码仍然可以工作。
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。hexversion和API和ABI Versioning:
import sys
if sys.hexversion >= 0x3000000:
print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion))
如果你想以人类可读的形式看到所有血腥的细节,你可以使用:
import platform;
print(platform.sys.version);
我的系统输出:
3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0]
从平台获取version_info对象是非常详细但机器可解析的。而是Sys,然后使用它的属性来采取预定的行动。例如:
import platform;
print(platform.sys.version_info)
系统输出:
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
当然,看看sys。Version和sys.version_info。
例如,要检查您正在运行Python 3。x,使用
import sys
if sys.version_info[0] < 3:
raise Exception("Must be using Python 3")
在这里,系统。Version_info[0]为主版本号。sys。Version_info[1]会给你次要版本号。
在Python 2.7及以后版本中,sys. js的组件Version_info也可以通过名称访问,所以主版本号是sys.version_info.major。
请参见如何在使用新语言特性的程序中检查Python版本?
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录