【问题标题】:python importlib no module namedpython importlib没有命名模块
【发布时间】:2017-09-13 19:29:14
【问题描述】:

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

<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

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

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

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

【问题讨论】:

  • formmodules 是不是cas 的子目录?
  • 是的,formodules 是 cas 的子目录

标签: python flask python-importlib


【解决方案1】:

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

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

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

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

您可能想尝试:

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

注意.

另一种选择是与sys.path 混在一起,这里真的没有必要。

【讨论】:

  • 我差点错过领先时期。效果很好!
猜你喜欢
  • 1970-01-01
  • 2012-07-14
  • 2019-12-12
  • 2011-11-27
  • 1970-01-01
  • 2021-01-08
  • 2018-03-12
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多