如何在脚本中检查 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 |
alpha ,beta ,candidate 或者 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_info
,platform
也有一种方法可以将 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")
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