如何在脚本中检查 Python 版本

Jinku Hu 2023年1月30日 2019年12月26日
  1. sys.version 方法
  2. sys.version_info 方法
  3. platform.python_version() 方法
  4. six 模块方法
如何在脚本中检查 Python 版本

在很多情况下,我们需要在 Python 脚本中得到 Python 版本信息,或更确切地说是执行 Python 脚本文件的 Python 解释器版本。

我们有以下几种方法可以来得到 Python 版本信息:

  • sys.version 方法
  • sys.version_info 方法
  • platform.python_version() 方法
  • six 模块方法

sys.version 方法

Python 版本信息可以从 sys 模块中的 sys.version 得到。

在 Python 2.x 中

>>> import sys
>>> sys.version
'2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]'

或在 Python 3.x 中

>>> import sys
>>> sys.version
'3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]'

sys.version_info 方法

sys.version 返回一个字符串,其中包含可读的当前 Python 解释器的版本信息。但是这些信息类似 major release number 并且 micro release number 需要进行额外的处理才能在代码中进一步使用。

sys.version_info 通过将版本信息作为命名元组返回,可以轻松解决此问题。它返回的版本数据是,

数据 描述
major 主要版本号
micro 补丁发布号
minor 次要发行号
releaselevel alphabetacandidate 或者 release
serial 序列号
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)

你可以比较当前版本的参考版本简单地使用 >>===<=< 操作符。

>>> import sys
>>> sys.version_info >= (2, 7)
True
>>> sys.version_info >= (2, 7, 11)
False

我们可以在脚本中添加 assert,以确保脚本以最低 Python 版本的要求运行。

import sys
assert sys.version_info >= (3, 7)

如果解释器不符合版本要求,则会引发 AssertionError

Traceback (most recent call last):
  File "C:\test\test.py", line 4, in <module>
    assert sys.version_info >= (3, 7)
AssertionError

platform.python_version() 方法

platform 模块中的 python_version() 以字符串形式返回 Python 版本 major.minor.patchlevel

>>> from platform import python_version
>>> python_version()
'3.7.0'

或类似于 sys.version_infoplatform 也有一种方法可以将 Python 版本作为 (major, minor, patchlevel) 字符串元组返回 - python_version_tuple()

>>> import platform
>>> platform.python_version_tuple()
('3', '7', '0')

six 模块方法

如果仅需要检查 Python 版本是 Python 2.x 还是 Python 3.x,则可以使用 six 模块 来完成。

import six
if six.PY2:
    print "Python 2.x"
if six.PY3:
    print("Python 3.x")
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - Python Version