python importlib без имени модуля

Я использую колбу и имею следующую структуру

<root>
manage_server.py
cas <directory>
--- __init__.py
--- routes.py
--- models.py
--- templates <directory>
--- static <directory>
--- formmodules <directory>
------ __init__.py
------ BaseFormModule.py
------ Interview.py

В rout.py я пытаюсь создать экземпляр класса Interview в модуле Interview, вот так

my_module = "Interview"
module = importlib.import_module('formmodules."+my_module)

Я получаю ошибку здесь, которая говорит

ImportError: No module named formmodules.Interview

Некоторая информация о файлах инициализации:

/cas/formmodules/__init__.py is empty
/cas/__init__.py is where I initialize my flask app. 

Дайте мне знать, если полезно знать содержимое любого из этих файлов.

1 ответ

Решение

Это одна из классических проблем относительного и абсолютного импорта.

formmodules существует только относительно cas, но import_module делает абсолютный импорт (как с from __future__ import absolute_imports). поскольку formmodules не может быть найден через sys.path импорт не выполняется.

Один из способов исправить это - использовать относительный импорт.

Если имя указано в относительных терминах, то пакет должен указывать аргумент пакета, который должен выступать в качестве якоря для разрешения имени пакета.

Вы можете попробовать с:

module = importlib.import_module('.formmodules.' + my_module, package=__package__)

Обратите внимание .,

Другой вариант - обойти с sys.path, который действительно не нужен, здесь.

Другие вопросы по тегам