Правильный способ динамического импорта модуля с относительным импортом?
Мне нужно динамически импортировать модули в мой проект из другого пакета.
Структура похожа на:
project_folder/
project/
__init__.py
__main__.py
plugins/
__init__.py
plugin1/
__init__.py
...
plugin2/
__init__.py
...
Я сделал эту функцию для загрузки модуля:
import os
from importlib.util import spec_from_file_location, module_from_spec
def load_module(path, name=""):
""" loads a module by path """
try:
name = name if name != "" else path.split(os.sep)[-1] # take the module name by default
spec = spec_from_file_location(name, os.path.join(path, "__init__.py"))
plugin_module = module_from_spec(spec)
spec.loader.exec_module(plugin_module)
return plugin_module
except Exception as e:
print("failed to load module", path, "-->", e)
Это работает, если модуль не использует относительный импорт:
не удалось загрузить модуль / путь / к / плагинам / плагину1 -> Родительский модуль 'плагин1' не загружен, не может выполнить относительный импорт
Что я делаю неправильно?