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

2 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)
Run Code Online (Sandbox Code Playgroud)

然后我os.chdir到插件目录和map __import__整个事情,像这样:

active_plugins = map(__import__, viable_plugins)
Run Code Online (Sandbox Code Playgroud)

但是,当我active_plugins变成一个列表并尝试访问其中的模块时,Python会抛出一个错误,说它无法导入模块,因为它们似乎不在那里.

我究竟做错了什么?


编辑:只需使用交互式解释,这样做os.chdir__import__(modulefilename)产生正是我需要的.那么为什么上述方法不起作用呢?我是否对Python的功能部件做错了什么?

syk*_*ora 7

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

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

import sys
sys.path.insert(0, directory_of_modules)
# do imports here.
Run Code Online (Sandbox Code Playgroud)