在运行时检查Python模块版本
许多第三方Python模块都有一个保存模块版本信息的属性(通常是module.VERSION
或module.__version__
),但有些则不然。
这种模块的具体例子是libxslt和libxml2。
我需要检查在运行时正在使用这些模块的正确版本。 有没有办法做到这一点?
一个潜在的解决scheme将是在运行时读取源代码,对其进行散列,然后将其与已知版本的散列进行比较,但这很糟糕。
有更好的解决scheme吗?
我会远离哈希。 正在使用的libxslt版本可能包含某些不影响您使用的补丁types。
作为替代,我想build议你不要在运行时检查(不知道这是否是一个困难的要求)。 对于我编写的具有外部依赖关系(第三方库)的Python东西,我编写了一个脚本,用户可以运行它来检查它们的python安装,以查看是否安装了适当版本的模块。
对于没有定义“版本”属性的模块,你可以检查它包含的接口(类和方法),看它们是否与他们期望的接口匹配。 然后,在您正在处理的实际代码中,假定第三方模块具有您期望的接口。
使用pkg_resources 。 从PyPI安装的任何东西至less应该有一个版本号。
>>> import pkg_resources >>> pkg_resources.get_distribution("blogofile").version '0.7.1'
一些想法:
- 尝试检查存在或不存在于您需要的版本的function。
- 如果没有function差异,请检查函数参数和签名。
- 如果你不能从函数签名中找出它,在导入时设置一些存根调用并检查它们的行为。
您可以使用
pip freeze
以需求格式查看已安装的软件包。