在运行时检查Python模块的版本
在运行时检查Python模块的版本
许多第三方Python模块具有一个属性,用于保存模块的版本信息(通常是module.VERSION
或module.__version__
之类的东西),但有些模块没有。
这种模块的特例是libxslt和libxml2。
我需要在运行时检查是否使用了这些模块的正确版本。有没有方法可以做到这一点?
一种潜在的解决方案是在运行时读取源代码,对其进行哈希,然后将其与已知版本的哈希进行比较,但这很麻烦。
有更好的解决方案吗?
admin 更改状态以发布 2023年5月21日
如果你使用的是Python >=3.8
,你可以使用内置库中的一个模块来进行版本检查。要检查一个包的版本(以这个例子中的lxml
为例),运行以下命令:
>>> from importlib.metadata import version >>> version('lxml') '4.3.1'
这个功能也已经被移植到了早期版本的Python(<3.8
),但你需要先安装一个单独的库:
pip install importlib_metadata
然后,要检查一个包的版本(以这个例子中的lxml
为例),运行以下命令:
>>> from importlib_metadata import version >>> version('lxml') '4.3.1'
请注意,这仅适用于从PyPI安装的包。此外,你必须将一个包的名称作为version
方法的参数,而不是这个包提供的模块的名称(虽然它们通常是相同的)。
使用pkg_resources。PyPI上安装的任何东西至少应该有一个版本号。
>>> import pkg_resources >>> pkg_resources.get_distribution("blogofile").version '0.7.1'