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
, который действительно не нужен, здесь.