ユーニックス総合研究所

  • home
  • archives
  • python-check-version

Pythonのバージョンの確認方法のメモ【CPython参照】

  • 作成日: 2022-05-23
  • 更新日: 2023-12-25
  • カテゴリ: Python

Pythonのバージョンの確認方法

Pythonのバージョンを確認したいケースは多いと思う。
この記事ではPythonのバージョンの確認方法についてメモを残すことにする。

具体的には↓のとおり。

  • 実行ファイルのオプションによるバージョンの確認
  • sysモジュールを使ったバージョンの確認
  • platformモジュールを使ったバージョンの確認

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

実行ファイルのオプションによるバージョンの確認

Pythonインタプリタ(実行ファイル)を実行して得られるバージョン情報。
具体的にはオプション--version, -V, -VVを使う。

--versionの実行結果は例えば↓のようになる。

$ python --version  
Python 3.8.10  

-Vの実行結果は↓のとおり。

$ python -V  
Python 3.8.10  

-VVを使うと詳細なバージョン情報が見られる。

$ python -VV  
Python 3.8.10 (default, Mar 15 2022, 12:22:08)  
[GCC 9.4.0]  

↑の出力ではPythonがGCC 9.4.0でビルドされたことがわかる。
Pythonインタプリタがどの環境でビルドされたか知りたい場合は-VVを使うといいだろう。

sysモジュールを使ったバージョンの確認

コード上でPythonのバージョンを確認したい場合はsysモジュールが使える。
sysモジュールはCPythonではPython/sysmodule.cで定義されている。

sysモジュール内のバージョン情報の初期化は_PySys_InitCore()関数で行われている。

たとえばsys.version

SET_SYS_FROM_STRING("version", Py_GetVersion());  

というコードで初期化されている。
Py_GetVersion()関数はgetversion.cで定義されている。

内部ではPY_VERSION, Py_GetBuildInfo(), Py_GetCompiler()を参照している。

sys.version

sys.versionを参照すると詳細なバージョン情報の文字列が得られる。

import sys  

print(type(sys.version))  
# <class 'str'>  

print(sys.version)  
# 3.8.10 (default, Mar 15 2022, 12:22:08)  
# [GCC 9.4.0]  

一見するとオプション-VVの出力に似ているが、よく見ると若干違っているのがわかる。

sys.version_info

sys.version_infoはメジャーバージョン番号やマイナーバージョン番号などがタプルになっているオブジェクト。
これを参照するとメジャー、マイナー、マイクロ、リリースレベル、そしてシリアルなどがわかる。

import sys  

print(type(sys.version_info))  
# <class 'sys.version_info'>  

print(sys.version_info)  
# sys.version_info(major=3, minor=8, micro=10, releaselevel='final', serial=0)  

print('メジャー', sys.version_info[0])  # メジャー 3  
print('マイナー', sys.version_info[1])  # マイナー 8  
print('マイクロ', sys.version_info[2])  # マイクロ 10  
print('リリースレベル', sys.version_info[3])  # リリースレベル final  
print('シリアル', sys.version_info[4])  # シリアル 0  

hexversion

16進数で表されたバージョン番号はsys.hexversionで取得できる。

import sys  

print(type(sys.hexversion))  # <class 'int'>  
print(sys.hexversion)  # 50858736  

api_version

Python APIのバージョンはsys.api_versionで取得できる。

import sys  

print(type(sys.api_version))  # <class 'int'>  
print(sys.api_version)  # 1013  

platformモジュールを使ったバージョンの確認

platformモジュールを使ってもバージョンが確認できる。
platformはCPythonではLib/platform.pyで定義されている。
内部ではsysモジュールのバージョン情報を使っている。

python_version()

platform.python_version()関数でバージョン番号を表す文字列を取得できる。

import platform  

v = platform.python_version()  

print(type(v))  
# <class 'str'>  

print(v)  
# 3.8.10  

python_version_tuple()

platform.python_version_tuple()関数の結果はメジャー、マイナー、マイクロ番号が文字列のタプルになっている。

import platform  

vt = platform.python_version_tuple()  

print(type(vt))  
# <class 'tuple'>  

print(vt)  
# ('3', '8', '10')  
<class 'tuple'>  
('3', '8', '10')  

バージョンその他

platformにはバージョン番号のほかに以下を確認できる。

  • python_branch() ... Pythonが実装されたブランチ
  • python_revision() ... Pythonが実装されたリビジョン
  • python_build() ... Pythonがビルドされた番号と日付の文字列
  • python_compiler() ... Pythonをビルドしたコンパイラ

<!-- fix for ```python
import platform

print('ブランチ', platform.python_branch())

ブランチ

print('リビジョン', platform.python_revision())

リビジョン

print('ビルド', platform.python_build())

ビルド ('default', 'Mar 15 2022 12:22:08')

print('コンパイラ', platform.python_compiler())

コンパイラ GCC 9.4.0

```
筆者の環境ではブランチとリビジョンは確認できなかった。
ビルドとコンパイラは確認できた。