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