我想动态导入模块列表.我这样做有问题.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的功能部件做错了什么?
它说不能这样做,因为即使您将目录更改为模块所在的位置,该目录也不在您的导入路径上.
您需要做的是将该目录插入,而不是更改到模块所在的目录sys.path.
import sys
sys.path.insert(0, directory_of_modules)
# do imports here.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |