检查不定义__version__的Python库版本

3 投票
4 回答
1031 浏览
提问于 2025-04-16 11:49

我正在使用一个Python库,这个库没有定义__version__这个变量(sqlalchemy-migrate),我想根据我安装的库的版本在我的代码中实现不同的行为。

有没有办法在运行时检查我安装的库的版本(除了查看pip freeze的输出)?

4 个回答

2

如果这个库不知道自己的版本,那你基本上就没办法了。不过,如果你想支持的某个版本在代码走到“错误”路径时会抛出一个异常,你可以使用一个 try/except 块来处理这个情况。

4

在Python中,通常的做法是调用一个库里的东西,这个东西会根据你安装的版本表现得不同,像这样:

import somelibrary
try:
    somelibrary.this_only_exists_in_11()
    SOME_LIBRARY_VERSION = 1.1
except AttributeError:
    SOME_LIBRARY_VERSION = 1.0

一种更优雅的方法可能是创建一些包装函数。

def call_11_feature():
    try:
        somelibrary.this_only_exists_in_11()
    except AttributeError:
        somelibrary.some_convoluted_methods()
        somelibrary.which_mimic()
        somelibrary.the_11_feature()
2

pkg_resources 可能会有帮助,但你需要使用包的名称:

>>> import pkg_resources
>>> env = pkg_resources.Environment()
>>> env['sqlalchemy-migrate'][0].version
'0.6.2.dev'

撰写回答