如何引发模块版本号异常

问题描述 投票:0回答:6

当导入小于或大于 __version__ 给定值的模块时,如何引发异常?

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

python versioning
6个回答
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)

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'))

1
投票

像这样吗?

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

虽然很啰嗦,但是效果很好。

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


0
投票

您应该使用设置工具:

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

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

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


0
投票

您可以使用

packaging
https://packaging.pypa.io/en/stable/

from packaging import version
import pandas as pd

# Pandas 2.0 is required
assert version.parse(pd.__version__) >= version.parse("2.0.0")

-3
投票

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

>>> "1.2.2" > "1.2.1"
True

只有当版本的每个部分都是个位数时,这才有效:

>>> "1.2.2" > "1.2.10" # Bug!
True
© www.soinside.com 2019 - 2024. All rights reserved.