我正在尝试以编程方式导入模块。
这有效:
from dirname.models import modelclass as m
但这不是:
import importlib
m = importlib.import_module('models.modelclass', package='dirname')
我尝试从包含dirname的目录运行此脚本。 dirname包含__init__.py
文件。
我正在尝试使用django来完成这项工作。我得到一个ImportError,说“没有名为'models'的模块”
答案 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')