1387

如何检查 Python 解释器的哪个版本正在解释我的脚本?

4

24 回答 24

1585

此信息sys.version在模块中的字符串中可用sys

>>> import sys

人类可读:

>>> print(sys.version)  # parentheses necessary in python 3.       
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]

如需进一步处理,请使用sys.version_infosys.hexversion

>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192

要确保脚本以最低版本的 Python 解释器运行,请将其添加到您的代码中:

assert sys.version_info >= (2, 5)

这将比较主要和次要版本信息。根据需要将 micro (= 0, 1, 等) 甚至 releaselevel (= 'alpha', 'final', 等) 添加到元组中。但是请注意,“躲避”检查某个功能是否存在几乎总是更好,如果没有,解决方法(或纾困)。有时功能会在新版本中消失,被其他功能取代。

于 2009-07-07T16:20:12.490 回答
415

从命令行(注意大写“V”):

python -V

这记录在“man python”中。

从 IPython 控制台

!python -V
于 2013-07-22T19:50:40.250 回答
99

我喜欢这样sys.hexversion的东西。

>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
于 2010-06-10T20:08:35.203 回答
93

使用标准库platform中的 'spython_version

from platform import python_version
print(python_version())

# 3.9.2
于 2014-08-25T01:11:33.110 回答
70

你最好的选择可能是这样的:

>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
...    print "Error, I need python 2.6"
... else:
...    from my_module import twoPointSixCode
>>> 

此外,您始终可以将导入包装在一个简单的尝试中,这应该会捕获语法错误。而且,就@Heikki 而言,这段代码将与更旧版本的python 兼容:

>>> try:
...     from my_module import twoPointSixCode
... except Exception: 
...     print "can't import, probably because your python is too old!"
>>>
于 2010-06-10T16:06:05.513 回答
49

放一些类似的东西:

#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
  sys.stderr.write("You need python 2.6 or later to run this script\n")
  exit(1)

在脚本的顶部。

请注意,根据脚本中的其他内容,比目标更旧的 python 版本可能甚至无法加载脚本,因此无法报告此错误。作为一种解决方法,您可以在一个脚本中运行上述内容,该脚本使用更现代的代码导入脚本。

于 2010-06-10T16:08:54.310 回答
31

这是一个简短的命令行版本,它会立即退出(方便脚本和自动执行):

python -c "print(__import__('sys').version)"

或者只是主要的,次要的和微观的:

python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)
于 2014-09-02T20:02:50.270 回答
14

使用six模块,您可以通过以下方式完成:

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x
于 2017-10-20T02:36:31.483 回答
8
import sys
sys.version.split(' ')[0]

sys.version 为您提供您想要的,只需选择第一个数字 :)

于 2009-07-07T16:20:59.010 回答
5

就像 Seth 所说,主脚本可以检查sys.version_info(但请注意,直到 2.0 才出现,所以如果你想支持旧版本,你需要检查 sys 模块的另一个版本属性)。

但是您仍然需要注意不要在文件中使用旧 Python 版本中不可用的任何 Python 语言功能。例如,这在 Python 2.5 及更高版本中是允许的:

try:
    pass
except:
    pass
finally:
    pass

但不适用于较旧的 Python 版本,因为您只能使用 except OR finally 匹配尝试。因此,为了与较旧的 Python 版本兼容,您需要编写:

try:
    try:
        pass
    except:
        pass
finally:
    pass
于 2010-06-10T16:12:50.820 回答
3
from sys import version_info, api_version, version, hexversion

print(f"sys.version: {version}")
print(f"sys.api_version: {api_version}")
print(f"sys.version_info: {version_info}")
print(f"sys.hexversion: {hexversion}")

输出

sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
sys.api_version: 1013
sys.version_info: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
sys.hexversion: 50726384
于 2019-09-23T15:24:11.297 回答
3

几个答案已经建议如何查询当前的 python 版本。要以编程方式检查版本要求,我将使用以下两种方法之一:

# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))

# Method 2: 
import platform
from distutils.version import StrictVersion 
assert(StrictVersion(platform.python_version()) >= "2.6")
于 2017-11-16T02:25:11.783 回答
3

如果您想检测 Python 3 之前的版本并且不想导入任何内容...

...您可以(ab)使用列表理解范围更改并在单个表达式中执行此操作:

is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
于 2018-10-15T23:01:05.687 回答
3

只是为了好玩,以下是在 CPython 1.0-3.7b2、Pypy、Jython 和 Micropython 上执行此操作的一种方式。这更像是一种好奇心,而不是现代代码中的一种方式。我把它写成http://stromberg.dnsalias.org/~strombrg/pythons/的一部分,它是一个脚本,用于一次在许多版本的 python 上测试一段代码,所以你可以很容易地了解什么是 python功能与哪些版本的python兼容:

via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
    import platform
except (ImportError, NameError):
    # We have no platform module - try to get the info via the sys module
    check_sys = 1

if not check_sys:
    if hasattr(platform, "python_version"):
        via_platform = 1
    else:
        check_sys = 1

if check_sys:
    try:
        import sys
        test_sys = 1
    except (ImportError, NameError):
        # just let via_sys_version_info and via_sys_version remain False - we have no sys module
        pass

if test_sys:
    if hasattr(sys, "version_info"):
        via_sys_version_info = 1
    elif hasattr(sys, "version"):
        via_sys_version = 1
    else:
        # just let via_sys remain False
        pass

if via_platform:
    # This gives pretty good info, but is not available in older interpreters.  Also, micropython has a
    # platform module that does not really contain anything.
    print(platform.python_version())
elif via_sys_version_info:
    # This is compatible with some older interpreters, but does not give quite as much info.
    print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
    import string
    # This is compatible with some older interpreters, but does not give quite as much info.
    verbose_version = sys.version
    version_list = string.split(verbose_version)
    print(version_list[0])
else:
    print("unknown")
于 2018-03-16T01:05:19.157 回答
2

最简单的方法

只需在终端中输入 python ,您就可以看到如下所示的版本

desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
于 2016-02-09T14:11:24.197 回答
1

检查 Python 版本:python -Vpython --versionapt-cache policy python

您还可以运行whereis python以查看安装了多少个版本。

于 2018-04-11T02:01:11.277 回答
1

要在 Windows 上验证命令的 Python 版本,请在命令提示符下运行以下命令并验证输出

c:\>python -V
Python 2.7.16

c:\>py -2 -V
Python 2.7.16

c:\>py -3 -V
Python 3.7.3

此外,要查看每个 Python 版本的文件夹配置,请运行以下命令:

For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'
于 2019-04-02T17:13:06.287 回答
1

sys.version_info从 3.7开始似乎没有返回 a tuple。相反,它返回一个特殊的类,所以所有使用元组的例子都不起作用,至少对我来说。这是 python 控制台的输出:

>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>

我发现使用sys.version_info.major和的组合sys.version_info.minor似乎就足够了。例如,...

import sys
if sys.version_info.major > 3:
    print('Upgrade to Python 3')
    exit(1)

检查您是否正在运行 Python 3。您甚至可以使用...检查更具体的版本

import sys
ver = sys.version_info
if ver.major > 2:
    if ver.major == 3 and ver.minor <= 4:
        print('Upgrade to Python 3.5')
        exit(1)

可以检查您是否至少在运行 Python 3.5。

于 2018-10-06T11:38:48.953 回答
0

更简单最简单的方法:

在 Spyder 中,启动一个新的“IPython 控制台”,然后运行任何现有的脚本。

现在可以在控制台窗口中打印的第一个输出中看到该版本:

“Python 3.7.3(默认,2019 年 4 月 24 日,15:29:51)...”

在此处输入图像描述

于 2020-05-04T06:46:52.520 回答
0

对于 Windows,转到命令提示符并键入以下命令以获取 python 版本:

python --version

或者

python -V
于 2021-09-17T15:21:31.977 回答
0

这只是返回2.73.6或者3.9

import sys
current_version = ".".join(map(str, sys.version_info[0:2]))

这是您通常需要的...

于 2022-01-18T15:49:06.490 回答
0

要从命令行检查,在一个命令中,但包括主要、次要、微型版本、版本级别和串行,然后调用与您的脚本使用相同的 Python 解释器(即相同的路径):

> path/to/your/python -c "import sys; print('{}.{}.{}-{}-{}'.format(*sys.version_info))"

3.7.6-final-0

注意:.format()代替 f 字符串或'.'.join()允许您使用任意格式和分隔符,例如,使其成为一个 greppable 的单字字符串。我把它放在一个 bash 实用程序脚本中,该脚本报告所有重要版本:python、numpy、pandas、sklearn、MacOS、xcode、clang、brew、conda、anaconda、gcc/g++ 等。对于日志记录、可复制性、故障排除、错误报告等很有用.

于 2020-05-24T22:00:22.657 回答
-1

如果您在 linux 上工作,只需给出命令python 输出将是这样的

Python 2.4.3(#1,2009 年 6 月 11 日,14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] 在 linux2 上

输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。

于 2013-07-16T09:10:48.733 回答
-2

尝试os.popen在变量中读取它:

import os
ver = os.popen('python -V').read().strip()
print(ver)
于 2020-10-19T09:49:42.360 回答