如何查看运行我的脚本的Python版本?

时间:2009-07-07 16:17:50

标签: python version

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

24 个答案:

答案 0 :(得分:1199)

此信息位于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_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192

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

assert sys.version_info >= (2, 5)

这会比较主要和次要版本信息。根据需要,将微量(= 01等)甚至释放级别(= 'alpha''final'等)添加到元组中。但请注意,“躲避”检查是否存在某个特征,如果没有,则解决方法(或挽救)几乎总是更好。有时功能会在较新的版本中消失,被其他版本取代。

答案 1 :(得分:322)

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

python -V

这在'man python'中有记载。

答案 2 :(得分:94)

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

http://docs.python.org/library/sys.html#sys.hexversion

>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True

答案 3 :(得分:62)

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

>>> 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!"
>>>

答案 4 :(得分:54)

使用stdlib中的platform's python_version

>>> from platform import python_version
>>> print(python_version())
2.7.8

答案 5 :(得分:46)

如下所示:

#!/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可能无法加载脚本,因此无法报告此错误。作为一种变通方法,您可以在脚本中运行上述内容,该脚本使用更现代的代码导入脚本。

答案 6 :(得分:22)

这是一个简短的命令行版本,可以直接退出(方便脚本和自动执行):

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)

答案 7 :(得分:7)

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

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x

答案 8 :(得分:6)

最简单的方法

只需在终端中键入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.
>>> 

答案 9 :(得分:5)

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

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

try:
    pass
except:
    pass
finally:
    pass

但不适用于较旧的Python版本,因为除了OR之外你最终只能匹配try。因此,为了与旧的Python版本兼容,您需要编写:

try:
    try:
        pass
    except:
        pass
finally:
    pass

答案 10 :(得分:4)

import sys
sys.version.split(' ')[0]

sys.version为您提供所需内容,只需选择第一个数字:)

答案 11 :(得分:3)

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

您还可以运行whereis python以查看已安装的版本数量。

答案 12 :(得分:2)

要在运行Python解释器之前查看MSDOS脚本以检查版本(以避免Python版本语法异常),请参阅解决方案:

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

MS脚本; Python版本检查Python模块的预启动 http://pastebin.com/aAuJ91FQ (脚本可能很容易转换为其他操作系统脚本。)

答案 13 :(得分:2)

几个答案已经建议如何查询当前的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")

答案 14 :(得分:1)

只是为了好玩,以下是在CPython 1.0-3.7b2,Pypy,Jython和Micropython上进行此操作的方法。这更像是一种好奇心,而不是现代代码中的一种方式。我把它作为http://stromberg.dnsalias.org/~strombrg/pythons/的一部分编写,这是一个用于在许多版本的python上同时测试代码片段的脚本,因此您可以轻松了解哪些python功能与​​哪些版本的python兼容: / p>

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")

答案 15 :(得分:1)

从3.7开始,

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

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

我发现结合使用sys.version_info.majorsys.version_info.minor似乎足够。例如,...

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

检查是否正在运行Python3。您甚至可以使用...检查更特定的版本。

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。

答案 16 :(得分:0)

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

...您可以(ab)使用列表理解作用域更改,并以单个表达式进行操作:

is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)

答案 17 :(得分:0)

要在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'

答案 18 :(得分:0)

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

答案 19 :(得分:0)

最简单的方法:

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

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

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

enter image description here

答案 20 :(得分:0)

要在命令行中执行一个命令,但要包含主要,次要,微型版本,发行版和序列号,然后调用与您相同的Python解释器(即相同路径)重新使用您的脚本:

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

3.7.6-final-0

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

答案 21 :(得分:0)

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

import os
ver = os.popen('python -V').read().strip()
print(ver)

答案 22 :(得分:-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)] on linux2

     

输入“help”,“copyright”,“credit”或“license”了解更多信息   信息。

答案 23 :(得分:-2)

最干净的解决方案是使用sys.version_info。但是,这需要import sys

还有另一种不需要任何导入的解决方案,因此可以插入到任何地方:

if str is bytes:
    print 'Python <= 2.7'
else:
    print 'Python >= 3.0'

但是,只有在您确定当时没有人把str弄乱的情况下,才应该这样做。也就是说,str = unicode之类的其他可移植性修补程序仅应在该代码之后使用。