在Python3.0中动态导入模块?

时间:2009-10-11 16:17:17

标签: python import python-3.x

我想动态导入模块列表。我这样做有问题。 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的功能部分做错了什么?

1 个答案:

答案 0 :(得分:7)

它说不能这样做,因为即使您将目录更改为模块所在的位置,该目录也不在您的导入路径上。

您需要做的是将该目录插入sys.path,而不是更改到模块所在的目录。

import sys
sys.path.insert(0, directory_of_modules)
# do imports here.