python importlib没有命名的模块

Sid*_*kel 6 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
Run Code Online (Sandbox Code Playgroud)

在routes.py中,我试图在Interview模块中创建Interview类的实例,如下所示

my_module = "Interview"
module = importlib.import_module('formmodules."+my_module)
Run Code Online (Sandbox Code Playgroud)

我在这里看到一个错误

ImportError: No module named formmodules.Interview
Run Code Online (Sandbox Code Playgroud)

有关初始化文件的一些信息:

/cas/formmodules/__init__.py is empty
/cas/__init__.py is where I initialize my flask app. 
Run Code Online (Sandbox Code Playgroud)

让我知道了解这些文件中的任何内容是否有帮助。

dhk*_*hke 6

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

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

解决此问题的一种方法是使用相对导入

如果名称是用相对术语指定的,那么必须将package参数指定给要用作解析软件包名称的锚点的软件包。

您可能要尝试:

module = importlib.import_module('.formmodules.' + my_module, package=__package__)
Run Code Online (Sandbox Code Playgroud)

注意.

另一个选择是与混用sys.path,在这里确实没有必要。