我有以下文件结构
./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")]
或者还有其他技术吗?
答案 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。