11

我正在使用烧瓶并具有以下结构

<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. 

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

4

1 回答 1

12

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

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

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

如果名称以相对术语指定,则必须将包参数指定给包,该包将充当解析包名称的锚。

您可能想尝试:

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

注意..

另一种选择是在这里搞砸 with sys.path,这实际上是没有必要的。

于 2017-09-13T19:50:32.750 回答