我有一个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/

其他回答

试试这段代码,应该可以工作:

import platform
print(platform.python_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/

为了使脚本与Python2和3兼容,我使用:

from sys import version_info
if version_info[0] < 3:
    from __future__ import print_function

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

下面是我使用sys的一些代码。检查Python的安装:

def check_installation(rv):
    current_version = sys.version_info
    if current_version[0] == rv[0] and current_version[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 'check_installation' function checks if Python is >= 2.7 and < 3
required_version = (2,7)
check_installation(required_version)