首页 > 解决方案 > Python:动态运行文件夹中所有python脚本中的所有函数

问题描述

main_folder/
  __init__.py
  sub_folder1/
    __init__.py
    run_all_functions.py
  sub_folder2/
    __init__.py
    script1.py
    script2.py
    script3.py

脚本1.py

def something():
 ....
def something2():
 ....

脚本2.py

def example():
 ....
def example2():
 ....

脚本3.py

def example3():
 ....

想检查是否有方法可以在文件夹 2 中的不同脚本中运行所有函数,并将它们动态合并到文件夹 1 中的 run_all_functions.py 中。在不久的将来,我可能会在文件夹 2 中添加更多带有函数的脚本。

标签: pythonfunction

解决方案


如果您使用脚本向目录中的run_all()每个文件添加入口点函数.py,则可以加载所有这些文件并调用它们各自的run_all()函数。

这里做个小示范,调整一下DIR

import importlib.util
import pathlib

DIR = '/tmp/test'

for pyfile in pathlib.Path(DIR).glob('*.py'): # or perhaps 'script*.py'
    spec = importlib.util.spec_from_file_location(f"{__name__}.imported_{pyfile.stem}" , pyfile)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    module.run_all()

如果没有 per module run_all(),您必须使用某种自省来查找要运行的所有函数。


推荐阅读