__import__ против imp.load_module
Я получил сообщение об ошибке при попытке установить autopep8 с Ironpython:
ImportError: No module named logilab
Фрагмент кода, который не удалось:
def load_module(self, fullname):
self._reopen()
try:
mod = imp.load_module(fullname, self.file, self.filename, self.etc)
finally:
if self.file:
self.file.close()
# Note: we don't set __loader__ because we want the module to look
# normal; i.e. this is just a wrapper for standard import machinery
return mod
При использовании интерпретатора ipy64 импорт logilab не завершился неудачей. Я добавил оператор печати для имени файла, и он показал:
C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\logilab_common-0.59.1-py2.7.egg\logilab
Путь существует и содержит файл init.py со следующим содержимым:
"""generated file, don't modify or your data will be lost"""
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
pass
Я исправил ошибку быстро и грязно, добавив
except ImportError:
mod = __import__(fullname)
но у меня нет хорошего представления об этом исправлении, так как я не знаю возможных последствий.
Теперь, почему использование imp.load_module завершается неудачно и в чем разница с использованием импорта?