[解決!Python]Python処理系のバージョンを確認するには解決!Python

sysモジュールとplatformモジュールが提供する属性や関数、あるいはpythonコマンドを使ってPython処理系のバージョンを確認する方法を紹介する。

» 2021年11月30日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

スクリプトでのバージョンの確認

# sysモジュールのversion属性とversion_info属性
import sys

sysver = sys.version
print(sysver)
# 出力例:
#3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)]
#3.10.0 (v3.10.0:b494f5935c, Oct  4 2021, 14:59:20) [Clang 12.0.5 (clang-1205.0.22.11)]

sysverinfo = sys.version_info
print(sysverinfo)
# 出力例:
#sys.version_info(major=3, minor=10, micro=0, releaselevel='final', serial=0)

major = sysverinfo.major  # sysverinfo[0]と同値
minor = sysverinfo.minor  # sysverinfo[1]と同値
micro = sysverinfo.micro  # sysverinfo[2]と同値
print(f'Python {major}.{minor}.{micro}'# Python 3.10.0

# platformモジュールのpython_version関数とpython_version_tuple関数
import platform

pltpyver = platform.python_version()
print(pltpyver)  # 3.10.0

t = platform.python_version_tuple()
print(t)  # ('3', '10', '0')
print(f'Python {t[0]}.{t[1]}.{t[2]}'# Python 3.10.0


pythonコマンドでのバージョンの確認

% python3 --version
Python 3.10.0
% python3 -V
Python 3.10.0
% python3 -VV
Python 3.10.0 (v3.10.0:b494f5935c, Oct  4 2021, 14:59:20) [Clang 12.0.5
(clang-1205.0.22.11)]



sysモジュールのversion属性とversion_info属性

 sysモジュールとplatformモジュールには、Pythonプログラムからそれを実行しているPython処理系のバージョンを確認するのに利用できる属性や関数が幾つか含まれている。

 sysモジュールではversion属性とversion_info属性がこうした目的に使用できる。

 以下はsys.version属性を使用する例だ。

import sys

sysver = sys.version
print(sysver)
# 出力例:
#3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)]
#3.10.0 (v3.10.0:b494f5935c, Oct  4 2021, 14:59:20) [Clang 12.0.5 (clang-1205.0.22.11)]


 ご覧の通り、sys.version属性はPython処理系のバージョン、ビルド番号やビルドに使われたコンパイラに関する情報などを含んだ文字列である。

 sys.version_info属性の使用例を以下に示す。

sysverinfo = sys.version_info
print(sysverinfo)
# 出力例:
#sys.version_info(major=3, minor=10, micro=0, releaselevel='final', serial=0)


 上に示すように、sys.version_info属性は5要素で構成される名前付きタプルである。そのうち、releaselevelだけが文字列で他の要素は全て整数値となる。また、これは名前付きタプルなので、以下のように(インデックスではなく)属性のように各要素にアクセスすることも可能だ。

major = sysverinfo.major  # sysverinfo[0]と同値
minor = sysverinfo.minor  # sysverinfo[1]と同値
micro = sysverinfo.micro  # sysverinfo[2]と同値
print(f'Python {major}.{minor}.{micro}'# Python 3.10.0


 プログラムの動作を特定のバージョン以降のみに制限する場合などには、こちらを使うのがよいかもしれない。特に2021年現在、Pythonはマイナーバージョンが2桁となっている。文字列にしろ数値にしろ、3.10と3.9なら後者が大きくなるので安易に「メジャーバージョン.マイナーバージョン」を条件とすると想定とは異なる動作をする可能性がある。以下はバージョンを比較してPython 3.10以降のみをサポートしようとしているつもりのコード例だが、2つ目の例では例外が発生してしまう。

if major != 3 or minor <= 9# Python 3.10以降を想定(Python 4がないこと前提)
    raise RuntimeError('Python version does not meet to run this program.')

sysver = sysver.split(' ')[0# Pythonバージョンだけを抽出
print(sysver)  # 3.10.0
if sysver <= '3.9'# '3.10.0' <= '3.9'なので例外が発生する
    raise RuntimeError('Python version does not meet to run this program.')


platformモジュールのpython_version関数とpython_version_tuple関数

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。