如何在模块的版本号上引发异常

时间:2009-01-07 02:39:57

标签: python versioning

如果为__version __导入小于或大于给定值的模块,如何引发异常?

有很多不同的方法可以做到,但我觉得必须有一些非常简单的方法让我目前无法理解。在这种情况下,版本号的格式为x.x.x

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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'))

答案 2 :(得分:1)

喜欢这个吗?

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

这很啰嗦,但效果很好。

另外,请查看pip,它提供了更多高级功能。

答案 3 :(得分:0)

你应该使用setuptools:

它允许您锁定应用程序的依赖关系,因此即使系统上存在多个版本的egg或package,也只能使用正确的版本。

这是一种更好的工作方式:如果存在错误的依赖版本,则最好确保存在正确的版本,而不是失败。

Setuptools提供了一个安装程序,可以保证在安装时运行应用程序所需的一切。它还为您提供了一种方法,可以选择PC上可能存在的许多版本的软件包是在发出import语句时加载的软件包。

答案 4 :(得分:-1)

如果您知道版本字符串的确切格式,则可以使用简单比较:

>>> "1.2.2" > "1.2.1"
True

这仅在版本的每个部分都是单个数字时才有效:

>>> "1.2.2" > "1.2.10" # Bug!
True