如何在指令碼中檢查 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