質問

__ version__の指定値よりも小さいまたは大きいモジュールをインポートするときに、どのように例外を発生させることができますか?

それを行うにはさまざまな方法がありますが、現時点で私を惑わせる本当に簡単な方法が必要だと感じています。この場合、バージョン番号の形式はx.x.x

です。
役に立ちましたか?

解決

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 もご覧ください。

setuptoolsを使用する必要があります:

アプリケーションの依存関係をロックできるため、システム上に複数のバージョンのeggまたはパッケージが存在する場合でも、正しいバージョンのみが使用されます。

これはより良い作業方法です。間違ったバージョンの依存関係が存在する場合に失敗するよりも、適切なバージョンが存在することを確認する方が良いです。

Setuptoolsは、アプリケーションの実行に必要なすべてがインストール時に存在することを保証するインストーラーを提供します。また、インポートステートメントを発行したときにPCに存在する可能性のあるパッケージの多くのバージョンのどれをロードするかを選択する手段も提供します。

バージョン文字列の正確なフォーマットがわかっている場合、単純な比較が機能します:

>>> "1.2.2" > "1.2.1"
True

これは、バージョンの各部分が1桁の数字である場合にのみ機能します。

>>> "1.2.2" > "1.2.10" # Bug!
True
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top