Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中的子文件夹递归加载所有模块_Python_Python 2.7 - Fatal编程技术网

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

从Python中的子文件夹递归加载所有模块,python,python-2.7,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

我有以下文件结构

./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中使用
\uuuu init\uuuuuuuuuuupy
,如下所示

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

还是有其他技术

我有一段代码用于此目的,只需将其用作您的顶层
\uuuu init\uuuuuuuuy.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\u包
来查找所有模块,而不是文件glob。

我认为这是一个非常好的选择,但我会添加一个
startswith(“''')
,除非您想加载所有
\uu init\uuuuuuuuuuy
文件。如何?你能给我一个提示吗?或者,如果您有答案,您可以发布它吗?@Phoneix您正在f(文件名)上迭代,所以类似于
的东西,如果不是os.path.basename(f).StartWith(“\uuuuIx”)
,同样,这不是必须的,您的代码仍然很好。