2013-01-10 50 views
2

我有一个目录plugins包含我的应用程序的插件,每个插件是一个python文件,其中定义了一个方法handle。结构是这样的:如何添加获取我从x导入*导入的模块数组?

- main.py 
- plugins 
     - hello.py 
     - foo.py 
     - bar.py 
     - ... 

现在我想导入plugins所有模块main.py有:

from plugins import *

不过,我想获得的模块列表,所以我可以通过它循环,如:

for plugin in plugin_modules: 
    plugin.handle(data) 

我该怎么做?

+0

如果有一个叫做'handle'在'hello.py'功能,您将无法无论如何你都可以用'import *'来调用它 - 你不能从插件导入*; hello.handle(data)'(尝试它)。你必须做'从插件导入hello; hello.handle(data)' –

回答

1

尝试pkgutil

import os.path, pkgutil 
import mypackage 

package = mypackage 
mods = [n for _,n,_ in pkgutil.iter_modules([os.path.dirname(package.__file__)])] 

for mod in mods: 
    package.__dict__.get(mod).handle(data) 
+0

我怎么能使用这个名字来获得真正的模块? – wong2

+0

不,我需要在这些模块中调用方法'handle' – wong2

+0

@ wong2 - 编辑答案。 – root

0

简单,但不会得到的一切:

import plugins 

for i in range(len(plugins.__all__)): 
    getattr(plugins, plugins.__all__[i]).handle(data)