4

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

いろいろな方法がありますが、今のところ、私にはわからない本当に簡単な方法があるに違いないと思います。この場合、バージョン番号は xxx の形式です。

4

5 に答える 5

6

Python には、distutils の一部としてこれが組み込まれています。モジュールが呼び出されdistutils.version、いくつかの異なるバージョン番号形式を比較できます。

from distutils.version import StrictVersion

print StrictVersion('1.2.2') > StrictVersion('1.2.1')

必要以上の情報については、次のドキュメントを参照してください。

>>> import distutils.version
>>> help(distutils.version)
于 2009-01-07T02:52:13.710 に答える
2

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'))
于 2009-01-07T03:34:59.430 に答える
1

このような?

assert tuple(map(int,module.__version__.split("."))) >= (1,2), "Module not version 1.2.x"

これは冗長ですが、かなりうまく機能します。

また、より高度な機能を提供するpipも調べてください。

于 2009-01-07T02:51:06.723 に答える
-2

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

>>> "1.2.2" > "1.2.1"
True

ただし、これはバージョンの各部分が 1 桁の場合にのみ機能します。

>>> "1.2.2" > "1.2.10" # Bug!
True
于 2009-01-07T03:24:51.680 に答える