Моя проблема была еще более сложной:
импорт global/site-packages
модуля из файла с тем же именем
Работа над aero the pm recycler Я хотел получить доступ к pip api, в частности pip.commands.search.SearchCommand
из моего адаптера класса Pip в исходном файле pip.py.
В этом случае попытка изменить sys.path
бесполезно, я даже дошел до полного стирания sys.path
и добавления папки .../site-packages/pip...egg/
в качестве единственного элемента в sys.path
, и не повезло.
Я бы все равно получил:
print pip.__package__
# 'aero.adapters'
Я нашел два варианта, которые в конечном итоге мне помогли, они должны работать одинаково хорошо для вас:
с использованием __builtin__.__import__()
встроенная функция
global_pip = __import__('pip.commands.search', {}, {}, ['SearchCommand'], -1)
SearchCommand = global_pip.SearchCommand
При чтении документации предлагается использовать следующий метод.
с использованием importlib.import_module()
оболочки обертки __import__
.
Документация объясняет, что import_module()
является второстепенным подмножеством функций из Python 3.1, чтобы облегчить переход сОт 2,7 до 3,1
from importlib import import_module
SearchCommand = import_module('pip.commands.search').SearchCommand
Оба варианта выполняют свою работу, в то время как import_module()
определенно чувствует себя более питоническим, если вы спросите меня, вы согласитесь?
nJoy!