Pythonのバージョンに関する情報は、sys モジュールの version と version_info に含まれています。
>>> import sys >>> sys.version '3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit (Intel)]' >>> sys.version_info sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
ソースコードとして扱いやすいのは sys.version_info の方になります。
以下はバージョンチェックを行う関数と、その簡単な使用例です。
# 便利関数を定義 >>> def or_later(major, minor=0, micro=0): ... import sys ... return sys.version_info >= (major, minor, micro) # 3.0.0以上ならxrangeを定義 >>> if or_later(3): ... xrange = range
これでめでたくバージョンチェックができるわけですが、注意点が2つあります。
① Python 3.0 と 3.1
こちらで述べた通り、Python 3.0 と 3.1 のリリースはやや特殊です。2.7 に含まれているけど 3.0 と 3.1 には含まれていない、という機能があることに注意して下さい。
② バージョンが全てではない
訳あって古いバージョンのPythonが使われていても、モジュールによっては個別にインストール可能です。
私が実際に経験した失敗談なのですが、プログラムに argparse(Python 2.7 で追加された)を使っていたので or_later(2, 7) と場合分けしていたら、Python 2.6 の環境に自力で argparse をインストールしている人がいて、プログラム自体は動作可能なのにバージョンチェックで停止してしまっていた、ということがありました。
つまり、特定のモジュールが含まれているかで場合分けするなら、
if or_later(2, 7): pass else: print('argparse module is required') sys.exit()とバージョンで場合分けするよりも
try: import argparse except ImportError: print('argparse module is required') sys.exit()と書く方が、汎用性の観点から優れている、ということになります。
0 件のコメント:
コメントを投稿