检查不定义__version__的Python库版本
我正在使用一个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'