__version__ の指定された値よりも小さいまたは大きいモジュールをインポートするときに、どのように例外を発生させることができますか?
いろいろな方法がありますが、今のところ、私にはわからない本当に簡単な方法があるに違いないと思います。この場合、バージョン番号は xxx の形式です。
__version__ の指定された値よりも小さいまたは大きいモジュールをインポートするときに、どのように例外を発生させることができますか?
いろいろな方法がありますが、今のところ、私にはわからない本当に簡単な方法があるに違いないと思います。この場合、バージョン番号は xxx の形式です。
Python には、distutils の一部としてこれが組み込まれています。モジュールが呼び出されdistutils.version
、いくつかの異なるバージョン番号形式を比較できます。
from distutils.version import StrictVersion
print StrictVersion('1.2.2') > StrictVersion('1.2.1')
必要以上の情報については、次のドキュメントを参照してください。
>>> import distutils.version
>>> help(distutils.version)
easy_install でインストールされたモジュールについて話している場合は、これが必要です
import pkg_resources
pkg_resources.require("TurboGears>=1.0.5")
インストールされているモジュールのバージョンが古い場合、これによりエラーが発生します
Traceback (most recent call last):
File "tempplg.py", line 2, in <module>
pkg_resources.require("TurboGears>=1.0.5")
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 626, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 528, in resolve
raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (TurboGears 1.0.4.4 (/usr/lib/python2.5/site-packages/TurboGears-1.0.4.4-py2.5.egg), Requirement.parse('TurboGears>=1.0.5'))
このような?
assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"
これは冗長ですが、かなりうまく機能します。
また、より高度な機能を提供するpipも調べてください。
バージョン文字列の正確なフォーマットがわかっている場合は、単純な比較が機能します。
>>> "1.2.2" > "1.2.1"
True
ただし、これはバージョンの各部分が 1 桁の場合にのみ機能します。
>>> "1.2.2" > "1.2.10" # Bug!
True