Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

Относительный импорт в Python

#python


С некоторых пор (как отменили относительный импорт) не могу нормально решить такой
вопрос:
Предположим, структура программы
app/
    __init__.py
    foo/
        __init__.py
        handler.py

Как из модуля handler.py загрузить что-либо из пакета foo?
Всё дело в том, что изначально имя пакета foo неизвестно, загружаю я его с помощью
importlib.
Пока я нашёл такой костыль:
обрезаю переменную __name__, которая в handler.py равна 'foo.handler', т.е. так
foo_name = __name__.rsplit('.', 1)[0]

а потом загружаю необходимый мне модуль 
needle_module = importlib.import_module('.' + <имя модуля>, foo_name)

но, как-то, не кошерно это...    


Ответы

Ответ 1



Я вот смотрю на вашу схему и вижу в ней что и сам хендлер ваш в этом же пакете, так спрашивается зачем мучатся когда достаточно имя файла написать?? собственно видел такое mod=__import__("attr") где attr имя файла attr.py

Ответ 2



Может добавить путь в sys.path?

Ответ 3



In handler.py: from ..module import function

Комментариев нет:

Отправить комментарий