我有一个Python文件,它可能必须支持Python版本< 3。X和>= 3.x。是否有一种方法可以内省Python运行时以了解它正在运行的版本(例如,2.6或3.2.x)?


当前回答

如果你想以人类可读的形式看到所有血腥的细节,你可以使用:

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版本?

/ sys。hexversion和API和ABI Versioning:

import sys
if sys.hexversion >= 0x3000000:
    print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion))

最佳解决方案取决于有多少代码是不兼容的。如果有很多地方需要支持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/

因为你感兴趣的是你是否有Python 2或3,这有点笨拙,但绝对是最简单和100%的工作方式如下: python Python_version_major = 3/2*2 这样做的唯一缺点是,当有Python 4时,它可能仍然会给你3。

如果你想以人类可读的形式看到所有血腥的细节,你可以使用:

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)