代码 - Python 实现动态加载

  1. importlib库
  2. exec函数
  3. __import__函数
  4. 参考

目录结构

 .
├── module/  
│  ├── module_1.py
│  └── module_2.py
└── main.py

module_1.py

def echo():  
    print("This is module 1")

module_2.py

def echo():  
    print("This is module 2")

importlib库

  • main.py
    import os  
    import importlib  
      
    MOD_DIR = "modules/"  
      
    for root, dirs, files in os.walk(MOD_DIR):  
        modules = [f for f in files if f.endswith(".py") and not f.startswith("__")]  
        for module in modules:  
            module_name = module.rstrip(".py")  
            module_path = MOD_DIR.replace(os.sep, ".")  
            module_obj = importlib.import_module(module_path+module_name)  
            module_obj.echo()
    

exec函数

  • main.py
    import os  
      
    MOD_DIR = "modules/"  
      
    for root, dirs, files in os.walk(MOD_DIR):  
        modules = [f for f in files if f.endswith(".py") and not f.startswith("__")]  
        for module in modules:  
            module_name = module.rstrip(".py")  
            module_path = MOD_DIR.replace(os.sep, ".")  
            exec("import " + module_path + module_name)  
            exec(module_path + module_name + ".echo()")
    

__import__函数

  • main.py
    import os  
    
    MOD_DIR = "modules/"  
      
    for root, dirs, files in os.walk(MOD_DIR):  
        modules = [f for f in files if f.endswith(".py") and not f.startswith("__")]  
        for module in modules:  
            module_name = module.rstrip(".py")  
            module_path = MOD_DIR.replace(os.sep, ".")  
            module_obj = __import__(module_path + module_name, globals(), locals(), [""], 0)  
            module_obj.echo()
    

参考

内置函数 — Python 3 文档
5. 导入系统 — Python 3 文档


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 cnlnnn@qq.com

文章标题:代码 - Python 实现动态加载

字数:245

本文作者:cnlnn

发布时间:2024-09-10, 21:00:00

最后更新:2024-09-11, 01:42:27

原始链接:https://cnlnn.pages.dev/posts/python_module_loader/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。