首页 文章

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

提问于
浏览
915

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

18 回答

  • 1

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

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

    sys.version_info 似乎从3.7返回 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)
    

    检查您是否正在运行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 .

  • 48

    只是为了好玩,以下是在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")
    
  • 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(脚本可能很容易转换为其他操作系统脚本 . )

  • 46

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

    python -V
    

    这在'man python'中有记载 .

  • 4

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

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

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

    如果你正在使用linux只是给命令 python 输出将是这样的

    Python 2.4.3(#1,Jun 11 2009,14:09:37)[GCC 4.1.2 20080704(Red Hat 4.1.2-44)] on linux2输入“help”,“copyright”,“credits”或“许可证”了解更多信息 .

  • 1117

    像这样的东西:

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

  • -1

    像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
    
  • 21

    此信息位于sys模块的sys.version字符串中:

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

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

  • 0

    使用stdlib中的platform's python_version

    >>> from platform import python_version
    >>> print(python_version())
    2.7.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.
    >>>
    
  • 3

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

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

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

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

    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)
    
  • 61

    如果你想检测pre-Python 3并且不想导入任何东西......

    ...你可以(ab)使用列表理解范围更改并在_158353中执行:

    is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
    
  • 5
    import sys
    sys.version.split(' ')[0]
    

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

  • 91

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

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

相关问题