从Python中的子文件夹递归加载所有模块

时间:2014-01-23 04:59:01

标签: python python-2.7

我有以下文件结构

./AppFolder
    __init__.py
    main.py
    ./plugin
         __init__.py
         ./simple_plugin_1
             __init__.py
             simple_plugin_1.py
         ./simple_plugin_2
             __init__.py
             simple_plugin_2.py

我希望将所有插件模块递归加载到main.py中。那么我可以在AppFolder中使用__init__.py作为以下内容吗?

import os
import glob
__all__ = [ os.path.basename(f)[:-3] for f in glob.glob(os.path.dirname(__file__)+"/plugin/*/*.py")]

或者还有其他技术吗?

1 个答案:

答案 0 :(得分:1)

我有这个用于此目的的代码,只需将其用作顶级__init__.py

import pkgutil

__all__ = []
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
    module = loader.find_module(module_name).load_module(module_name)
    exec('%s = module' % module_name)
    __all__.append(module_name)

基本上与您拥有的相同,只是使用pkgutil.walk_packages来查找所有模块而不是文件glob。