如果为__version __导入小于或大于给定值的模块,如何引发异常?
有很多不同的方法可以做到,但我觉得必须有一些非常简单的方法让我目前无法理解。在这种情况下,版本号的格式为x.x.x
答案 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