我想动态导入模块列表。我这样做有问题。 Python总是喊出ImportError
并告诉我我的模块不存在。
首先,我获取模块文件名列表,并删除".py"
后缀,如下所示:
viable_plugins = filter(is_plugin, os.listdir(plugin_dir))
viable_plugins = map(lambda name: name[:-3], viable_plugins)
然后我os.chdir
到插件目录,map __import__
整个事情,就像这样:
active_plugins = map(__import__, viable_plugins)
但是,当我将active_plugins
转换为列表并尝试访问其中的模块时,Python会抛出一个错误,说它无法导入模块,因为它们似乎不存在。
我做错了什么?
编辑:只需使用交互式解释器,执行os.chdir
和__import__(modulefilename)
即可生成我需要的内容。那么为什么上述方法不起作用呢?我是否对Python的功能部分做错了什么?
答案 0 :(得分:7)
它说不能这样做,因为即使您将目录更改为模块所在的位置,该目录也不在您的导入路径上。
您需要做的是将该目录插入sys.path
,而不是更改到模块所在的目录。
import sys
sys.path.insert(0, directory_of_modules)
# do imports here.