如何从Python中的目录中的每个模块调用函数?

时间:2014-07-12 20:09:40

标签: python module

我想要做的是导入目录/包中的每个模块,然后在每个子模块上调用相同的函数,而不知道它们的名称或有多少。

如果您熟悉MCEdit(Minecraft的第三方工具),其过滤系统就是这样的。所有作为过滤器的.py文件都放在一个目录中,然后MCEdit导入每个文件,并且能够显示导入过滤器的列表并执行每个执行(级别,框,选项)功能。

1 个答案:

答案 0 :(得分:2)

找到该目录中的每个模块,使用__import__导入它,然后调用该函数。例如:

for file_name in os.listdir('path/to/modules'):
    if file_name.startswith('.') or not file_name.ends_with('.py'):
        continue
    module_name = file_name[:-3]
    module = __import__(module_name)
    module.some_function()

但是,这并不能解决所有情况 - 特别是,某些模块可能用C语言编写,并且具有.pyd扩展名而不是.py。你想说明这一点吗? sys.path中可能有几个条目。您想支持所有这些,还是只搜索一个目录?模块可以驻留在ZIP文件中。你必须支持这一点。使用导入钩子,可能会动态生成模块,而可能无法枚举它们。您必须决定在搜索模块时想要走多远。但是在找到它们之后,很容易导入和使用它们。