Правильный способ динамического импорта модуля с относительным импортом?

Мне нужно динамически импортировать модули в мой проект из другого пакета.

Структура похожа на:

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' не загружен, не может выполнить относительный импорт

Что я делаю неправильно?

Ответы на вопрос(3)

Ваш ответ на вопрос