为什么importlib不会找到我的模块

时间:2018-01-23 22:11:17

标签: python django python-3.x django-models python-import

我正在尝试以编程方式导入模块。

这有效:

from dirname.models import modelclass as m

但这不是:

import importlib
m = importlib.import_module('models.modelclass', package='dirname')

我尝试从包含dirname的目录运行此脚本。 dirname包含__init__.py文件。

我正在尝试使用django来完成这项工作。我得到一个ImportError,说“没有名为'models'的模块”

2 个答案:

答案 0 :(得分:1)

我不确定您是否需要指定包kwarg,import_module说明了包kwarg:

  

'''执行相对导入时需要参数。它       指定要用作解决问题的锚点的包       相对导入绝对导入。

我通常只是以这种方式使用importlib.import_module(我想将其指定为绝对导入):

import importlib
m = importlib.import_module('package.models.ModelClass')

有时我可能会在像MY_CLASS='package.models.ModelClass'这样的django设置中设置变量,并使用import_module在正在使用的类之间切换。

答案 1 :(得分:1)

我的问题是我试图做的事情的混乱,在问题中,modelclass是一个方法,models是模块,dirname是包。 import_module导入模块,而不是方法(顾名思义)。要以编程方式导入方法modelclass,我可以使用getattr():

import dirname.models as mods 
# or "mods = importlib.import_module('dirname.models')"
m = getattr(mods, 'modelclass')
相关问题