Python动态加载模块

需求:实现一个简单的pyton程序,接收两个参数:plugin_name, data,根据不同的plugin_name定位到不同的逻辑处理模块并进行输出。
实现方案:
使用python的库函数:load_source,将插件模块加载到一个dict中key为模块名称,value为类的实例,核心代码:

def load_plugins():
    global plugin_dict
    # 遍历插件目录加载所有py结尾的模块
    for root, dirs, files in os.walk(module_path):
        for file in files:
            if file.endswith(‘.py‘):
                module_name = file[:-3]
                print module_name
                module_file_path = os.path.join(root, file)
                module = load_source(module_name, module_file_path)
                # 判断插件中是否存在handler类
                if ‘handler‘ in dir(module):
                    print ‘load module: %s‘ % module_name
                    # 初始化类的实例并存入dict中,
                    clazz = getattr(module, class_name)
                    clazz_instance = clazz()
                    plugin_dict.update({module_name:clazz_instance})

插件代码样例:

# 统一的类
class handler:
    # 统一的处理接口
    def parse(self, data):
        print data
        result = []
        result.append(1)
        result.append(2)
        return json.dumps(result)

调用代码:

        # 根据plugin找到对应的实例
        clazz_instance = plugin_dict[plugin]
        try:
            ret = clazz_instance.parse(data_obj)
            return ret
        except Exception,e :
            print traceback.format_exc()

Python动态加载模块,布布扣,bubuko.com

时间: 2024-10-26 16:00:28

Python动态加载模块的相关文章

tengine 动态加载模块简单上手

首先解释下 nginx里有各种各样的模块你在编译的时候得先添加进去. tengine开启了dso动态加载模块的支持,你只需要得到模块包 然后使用tengine的编译工具编译进去使用即可.不需要说哪个模块缺少需要整个重新编译了 具体操作如下 我以这个ngx_realtime_request_module 模块为例 git clone https://github.com/magicbear/ngx_realtime_request_module 下载这个包和tengine(自行编译安装) git

python 动态加载

动态加载模块: 方式1:系统函数__import__() __import__(name, globals=None, locals=None, fromlist=(), level=0) name[必填] - 模块名称globals - 全局变量集合,默认为None,一般不用设置.如果设置的话,常用globals().locals - 局部变量集合,默认为None,一般不用设置.如果设置的话,常用locals().fromlist - 是否导入子模块,看上去是导入模块的列表.但实际上目前它只是

AngularJs 动态加载模块和依赖注入

最近项目比较忙额,白天要上班,晚上回来还需要做Angular知识点的ppt给同事,毕竟年底要辞职了,项目的后续开发还是需要有人接手的,所以就占用了晚上学习的时间.本来一直不打算写这些第三方的学习笔记,不过觉得按需加载模块并且成功使用这个确实是个好处,还是记录下来吧.基于本兽没怎么深入的使用requireJs,所以本兽不知道这个和requireJs有什么区别,也不能清晰的说明这到底算不算Angular的按需加载. 为了实现这篇学习笔记知识点的效果,我们需要用到: angular:https://g

Python 重新加载模块

每个Python文件中的import modulename只被加载一遍,如果在运行过程中,这个Module被更改了,即使在在interpretor中运行import 语句也没用. 可以使用importlib中的reload函数 import importlib importlib.reload(modulename) 原文地址:https://www.cnblogs.com/heenhui2016/p/11372353.html

Python importlib 动态加载模块

# 创建一个 src 文件夹,里面有一个 commons.py 文件,内容如下 def add(): print("add ....") # 创建一个 app.py 文件,内容如下: module = 'src.commons' func_name = 'add' import importlib m = importlib.import_module(module) print(m) func = getattr(m, func_name) func() # 运行 app.py ,结

apache和php动态加载模块

如何动态增加Apache和PHP模块 一.Apache动态增加模块: cd /home/redhat/httpd-2.2.15/modules/filters /usr/local/apache2/bin/apxs -i -c -a mod_deflate.c apxs命令参数说明:-i  此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中.-a  此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启

php动态加载模块gettext

安装php的模块有两种方式: 一.重新编译php,加上--with-gettext 二.动态安装 1.下载同版本的php原包,解压后进入ext目录,目录下便是模块 2.进入gettext目录下执行: /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install MAC安装时如遇到如下错误: Installing shared extensions: /

python如何重新加载模块

Python如何重新加载模块?Python教程(http://www.maiziedu.com/course/python/)中重新加载模块的方法有哪些呢?在python开发中,我们为了防止两个模块互相导入的问题,Python默认所有的模块都只导入一次,可以在开发时,我们会需要重新导入模块,那么怎么办呢,下面一起看看python重新加载模块的几种方法吧: Python2.7可以直接用reload(),Python3可以用下面几种方法: 方法一:基本方法 from imp import reloa

js 动态加载事件的几种方法总结

本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几种方法,我们也常常混合使用. 方法一.setAttributevar obj = document.getElementById("obj");obj.setAttribute("onclick", "javasc