python importlib没有命名的模块

时间:2017-09-13 19:29:14

标签: python flask 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

在routes.py中,我正在尝试在Interview模块中创建Interview类的实例,就像这样

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

我在这里收到错误

ImportError: No module named formmodules.Interview

有关init文件的一些信息:

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

请告诉我们知道这些文件的内容是否有帮助。

1 个答案:

答案 0 :(得分:5)

这是经典的相对与绝对导入问题之一。

formmodules仅相对于cas存在,但import_module执行绝对导入(与from __future__ import absolute_imports一样)。由于无法通过formmodules找到sys.path,导入失败。

解决此问题的一种方法是使用relative import

  

如果以相对术语指定名称,则必须将package参数指定给作为解析包名称的锚点的包。

您可能想尝试:

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

请注意.

另一种选择是使用sys.path进行清理,这里没有必要。