如何在运行时检测Python版本?

时间:2012-01-31 11:50:01

标签: python

我有一个Python文件,可能必须支持Python版本< 3.x和> = 3.x.有没有办法反省Python运行时知道它运行的版本(例如,2.6 or 3.2.x)?

9 个答案:

答案 0 :(得分:355)

当然,请查看sys.versionsys.version_info

例如,要检查您是否正在运行Python 3.x,请使用

import sys
if sys.version_info[0] < 3:
    raise Exception("Must be using Python 3")

此处,sys.version_info[0]是主要版本号。 sys.version_info[1]会为您提供次要版本号。

在Python 2.7及更高版本中,sys.version_info的组件也可以按名称访问,因此主版本号为sys.version_info.major

另见How can I check for Python version in a program that uses new language features?

答案 1 :(得分:50)

试试这段代码,这应该有效:

import platform
print(platform.python_version())

答案 2 :(得分:17)

sys.hexversionAPI and ABI Versioning

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

答案 3 :(得分:8)

最佳解决方案取决于代码不兼容的程度。如果有很多地方需要支持Python 2和3,six是兼容性模块。如果您想查看版本,six.PY2six.PY3是两个布尔值。

但是,比使用大量if语句更好的解决方案是尽可能使用six兼容性函数。假设,如果Python 3000具有next的新语法,则有人可以更新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/

干杯

答案 4 :(得分:7)

如果您希望以人类可读的形式查看所有血腥细节,可以使用:

import platform;

print(platform.sys.version);

我系统的输出:

3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0]

非常详细但机器可解析的东西是从version_info获取platform.sys对象,然后使用其属性来采取预定的行动。例如:

import platform;

print(platform.sys.version_info)

我的系统输出:

sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)

答案 5 :(得分:4)

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

下面的版本检查示例。

请注意,我不会停止执行,这个片段只是:
- 如果确切的版本匹配,则什么也不做 - 如果修订版(最后一个编号)不同,则写入INFO - 如果任何主要+未成年人不同,则写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)

答案 8 :(得分:0)

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