我正在處理一個沒有定義__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