我正在处理一个没有定义__version__变量(sqlalchemy-migrate)的Python库,并且我想根据库的版本有不同的行为我已经安装。检查未定义的Python库的版本__version__
有没有办法在运行时检查库的安装版本(除了检查输出pip freeze
)?
我正在处理一个没有定义__version__变量(sqlalchemy-migrate)的Python库,并且我想根据库的版本有不同的行为我已经安装。检查未定义的Python库的版本__version__
有没有办法在运行时检查库的安装版本(除了检查输出pip freeze
)?
通过pkg_resources可能会有帮助,但你需要使用的软件包名称:
>>> import pkg_resources
>>> env = pkg_resources.Environment()
>>> env['sqlalchemy-migrate'][0].version
'0.6.2.dev'
如果库不知道它自己的版本,那么你基本上是SOL。但是,如果您想要支持的某个版本在代码出现“错误”路径时会引发异常,则可以使用try
/except
块。
偶尔可以评估库的路径,这将是在某处... /usr/lib/python2.6/site-packages/XlsXcessive-0.1.6-py2.6.egg
这是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()
是啊,这就是我所担心的... – 2011-02-14 20:04:15