Python -- 插件化开发

使用python实现一个简单的插件模式 首先,我们定义一个插件接口,它规定了插件应该实现的方法或属性。这可以是一个抽象基类或一个接口类。pass。 阅读详情

动态导入

运行时,根据用户需要(提供字符串),找到模块的资源动态加载起来

内建函数__import__()

__import__(name, globals=None, locals=None, fromlist=(), level=0

  • name,模块名
  • import语句本质上就是调用的这个函数,但是不鼓励直接使用它。
  • 建议使用importlib.import_module()

sys = __import__('sys')等价于import sys

# t1.py
class A:
    def showme(self):
        print('I am A')
     
# t2.py
if __name__ == '__main__':
    mod = __import__('t1')
    cls = getattr(mod, 'A')
    cls().showme()

# 执行结果
I am A

importlib.import_module()

  • importlib.import_module(name, package=None)
    支持绝对导入和相对导入,如果是相对带入,package必须设置
# t1.py
class A:
    def showme(self):
        print('I am A')
        
# 主模块程序t2.py
import importlib

def plugin_load(plugin_name:str, sep=":"):
    m, _, c = plugin_name.partition(sep)
    mod = importlib.import_module(m)
    cls = getattr(mod, c)
    return cls()

if __name__ == '__main__':
    # 装载插件
    obj = plugin_load('t1:A')
    obj.showme()

# 执行结果
I am A

上面的例子就是插件化编程的核心代码

插件化变成技术

依赖的技术

  • 反射:运行时获取类型的信息,可以动态维护类型数据
  • 动态import:推荐使用importlib模块,实现动态import模块的能力
  • 多线程:可以开启一个线程,等待用户输入,从而加载指定名称的模块

加载的时机

  1. 程序启动时
    像pycharm这样的工具,需要很多组件,这些组件也可能是插件,启动的时候扫描固定的目录,加载插件
  2. 程序运行中
    程序运行过程中,接受用户指定或请求,启动相应的插件

两种方式有利弊,如果插件过多,会导致程序启动很慢,如果用户需要时再加载,插件太大或者依赖多时,插件也会启动慢

  • 所以先加载必须的、常用的插件,其他插件使用时,再动态载入较为好

应用

软件的设计不可能尽善尽美,或者在某些功能上,不可能做的专业,需要专业的客户自己增强。
Noerpad++,它只需要做好一个文本编辑器就可以,其他增强功能都通过插件的方式提供

  • 瓶邪检查、HTML预览、正则插件等
  • 要定义规范,定义插件从哪里加载,如何加载、必须实现的功能等

插件是把模块加载到系统中,运行它,增强当前系统功能,或者提供系统不具备的功能,往往插件技术应用在框架设计中。系统本身设计简单化、轻量级,实现基本功能后,其他功能通过插件加入进来,方便扩展

python插件化开发,Python 插件式程序设计与开发实践总结 插件式程序设计与开发实践总结By:授客 QQ:1033553122开发环境win 10python 3.6.5代码结构需求描述如上,以user.py为程序入口脚本,运行该脚本时,需要创建一个user类对象,执行一系列动作(包含一系列动作的列表)。程序执行动作前,要求先获取动作名称,根据该名称,执行不同的操作。这些操作,对应不同的类函数。实现思路大致实现思路就是,把user对象需要运行的类函数(使用... 阅读详情

相关推荐

Python为什么要使用包管理、插件化开发?

一、包管理 1、为什么使用包管理 目的是为了便于共享。为了更多项目调用使用,或者共享给别人,就需要打包,目的是为了复用。 Pypi(Python Package Index)公共的模块存储中心。https://pypi.python.org/pypi 2、主要工具 (1)distutils 官方标准库,使用安装脚本setup.py来构建、安装包。 (2)setuptools 是替代distutils的增强版工具集,包含easy_install工具,使用ez_setup.py文件,支持egg格式的构建和安装。

sehun_sx的博客 423

Python组件化开发框架

一款 Python 语言基于Django、Layui、MySQL等框架精心打造的一款模块化、高性能、企业级的敏捷开发框架,本着简化开发、提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按钮、图片裁剪等等一系列个性化、轻量级的组件,是一款真正意义上实现组件化开发的敏捷开发框架。

一米阳光的博客 661

python学习心得(5)— Python插件化开发

前言这年头,仅仅是硬编码的方式已经满足不了项目逇可拓展性,为了实现拓展的功能,考虑使用插件化加载功能来实现参考本文中的方法是import实现 以及参考开源python漏洞扫描器中的实现 https://github.com/Lcys/lcyscan 该扫描器通过加载不同的扫描模块,然后开启线程来实现实现废话少说,直接上代码项目结构如下图: 定义了一个Plugins包,中间包含了两个插件P

qiuyu93422的博客 3769

python中如何开发插件

以上是开发一个简单Python第三方插件库所要执行的基本步骤。对于复杂的库,过程可能会包含自动化测试、持续集成(CI)、打包成轮子文件(wheels)等更复杂的步骤。下面是一个简单的示例,假设我们要创建一个名为。目录中添加一个新的Python文件。

semicolon_hello的专栏 2230

使用Python开发插件化应用程序

插件化应用是个老话题啦,在我们的日常生活中更是屡见不鲜。无论是多年来臃肿不堪的Eclipse,亦或者是扩展丰富著称的Chrome,乃至近年来最优秀的编辑器VSCode,插件都是这其中重要的组成部分。插件的意义在于扩展应用程序的功能,这其实有点像iPhone手机和AppStore的关系,没有应用程序的手机无非就是一部手机,而拥有了应用程序的手机则可以是Everything。显然,安装或卸载应用程序并...

素履独行 | 元培的个人博客 2924

插件化开发的“卧底“:C# vs Python的生死对决,90%的开发者都选错了!

文章摘要: 本文揭示了插件系统存在的安全隐患,指出90%开发者忽视插件安全,导致恶意插件可篡改系统行为。通过真实案例说明Python和C#插件系统的漏洞:Python缺乏权限校验,C#虽有接口定义但防护不足。文章重点演示了C#安全插件化实现方案,包括严格接口定义、依赖注入、异常处理等核心机制,并提供了支付插件的安全实现示例,强调插件安全是系统生死线。

墨夶的博客 554

在 Python 中如何设计插件化系统?

这是「进击的Coder」的第 954篇技术分享来源:python 编程时光“ 阅读本文大概需要 6 分钟。 ”plug-in 在维基百科中是这么定义的:“在计算中,插件是软件组件,为现有计算机程序增加一个特定的特征。” 所以插件应该是一个能够灵活配置,并很方便的载入配置中的内容。由于 Python 本身的动态特性,插件化的实现就更灵活。现有的动态插件都是基于 Python 的命名空间和动态导入功...

静觅 384

kettle信息发送钉钉

由于其他的作业比较多,想要在job中加入一个转化发送消息到钉钉,其他的配置说明直接获取系统的信息。这样也避免直接修改其他的转换和大量的工作量。 步骤: 1、新建一个转换 拉取获取系统信息、获取变量、JavaScript代码、获取access_token组件。 2、获取系统信息设置 拿到需要的信息,比如作业的读写更新删除行数,job的日志内容 这个日志内容同在作业执行页面下输出的日志,所以可以在执行作业时选择是详细日志、基本日志还是错误日志。 3、获取变量 获取变量主要是想要去拿到job的名称,文件名。按

Deng_7788的博客 1448

python插件化设计_Python中的包管理及插件化开发

第三十六、包管理1、为什么使用包管理目的是为了便于共享。为了更多项目调用使用,或者共享给别人,就需要打包,目的是为了复用。Pypi(Python Package Index)公共的模块存储中心。https://pypi.python.org/pypi2、主要工具(1)distutils 官方标准库,使用安装脚本setup.py来构建、安装包。(2)setuptools 是替代distutils的...

weixin_39942191的博客 341

iTunes备份文件路径修改方法

因为以前的很多帖子iTunes都不是从微软下载的,而现在的iTunes一般都是微软商店里面的,它的路径为:“C:\Users\ 你的用户名 \Apple\MobileSync” (注:用户名,根据个人电脑名称更改)打开iTunes备份路径:“C:\Users\txh\AppData\Roaming\Apple Computer\MobileSync”,其中文件夹MobileSync就是用来存放备份文件的。创建你想备份纯在的目录创建备份文件目录(我的是G:/APPLE/Backup)2.粘贴的剪切文件目录。

尘玥的故事 1万+

基于CPCC_S_TASK_LIST_MAINTAIN的工艺路线组件批量分配实战与避坑指南

本文详细解析了SAP PP模块中基于CPCC_S_TASK_LIST_MAINTAIN函数实现工艺路线组件批量分配的实战技巧与避坑指南。针对批量分配的核心挑战,提供了参数配置、BAPI协同使用、Excel导入等解决方案,并分享了大容量数据处理优化经验,帮助用户高效完成工艺路线组件分配任务。

weixin_33563728的博客 306

Python中的包管理及插件化开发

一、包管理 1、为什么使用包管理 目的是为了便于共享。为了更多项目调用使用,或者共享给别人,就需要打包,目的是为了复用。 Pypi(Python Package Index)公共的模块存储中心。https://pypi.python.org/pypi 2、主要工具 (1)distutils 官方标准库,使用安装脚本setup.py来构建、安装包。 (2)setuptools 是替代distuti...

python学习者的博客 1025

QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型

常用的地图种类分为交通图,地形图,卫星图等等,在QML的Map(以OSM地图为例)中提供activeMapType属性用于读取当前显示的地图类型(注意:该属性为只读属性,不能用于赋值),QML中地图的加载寻找根据瓦片的文件名进行查找,例如名为"osm_100-l-5-2-2-3.png"的瓦片,其中5代表了该地图的类型

zjgo007的专栏 3164

Python 插件化开发

动态导入 运行时, 根据用户需求(提供字符串), 找到模块的资源动态加载起来 1. 内建函数 __import__() __import__(name, globals=None, locals=None, fromlist=(), level=0) name 指代 模块名 import 语句本质上就是调用这个函数, 不鼓励直接使用它, 建议使用importlib.import_module...

Bughuu的博客 544

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 320

PCL点云库入门(第6讲)——PCL库中Eigen数学工具库的基本使用(持续更新)

Eigen库是一个高性能的C++模板库,专注于线性代数、矩阵和向量运算,以及相关的数值分析和算法。在Eigen库中,所有的矩阵和向量均被视为矩阵模板类的实例。向量可以被看作是特殊形式的矩阵,具体表现为只包含1行或1列。

qq_36812406的博客 1753

Python中的异常处理、插件化开发示例、git基础命令

Python中的异常处理、插件化开发示例、git基础命令

ikkyphoenix的专栏 1328

6、Cocos2D游戏开发:精灵添加与角色实现

本文详细介绍了在Cocos2D游戏开发中如何添加背景精灵和玩家角色精灵。通过创建GameScene场景、组织项目资源、使用多分辨率图像适配不同设备,并深入讲解了将角色拆分为上下半身以实现更真实瞄准效果的原理。文章还解析了Cocos2D的图像搜索机制、锚点概念及其应用,以及如何通过父子节点关系管理复合角色。最终实现了猎人角色在场景中的正确显示与定位,为后续动画和交互功能打下基础。

e3f4g5的博客 90

python插件化开发

动态导入 运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。 内建函数__import__() __import __(name,globals=None,locals=None,fromlist=(),level=0) name,模块名 import语句本质上就是调用这个函数,建议不要使用,建议使用importlib.import_module() sys=__import__...

都枯槐的博客 1393

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 321

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python插件化设计importlib中的get_插件化开发与GUI开发

#### 1.插件化开发思想* 插件化开发是一种思想,考虑到程序功能的加载时机,用到的时候再加载;* 插件化开发依赖的技术点有:```反射:判断对象是否存在某种功能;动态导入:import;多线程:使用线程完成对应的任务;```#### 2.插件化开发的好处* 插件能够程序的功能多样性,用到时在加载,程序启动加快;#### 3.importlib模块```# importlib.imp...

weixin_35172279的博客 201

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入理解pluggy:Python插件化开发的核心引擎

深入理解pluggy:Python插件化开发的核心引擎 什么是pluggy? pluggy是Python生态中一个强大的插件管理系统核心库,它最初源自pytest项目,后来被抽象为一个独立组件。这个库为Python程序提供了灵活、规范的插件化扩展能力,让开发者能够轻松构建"可插拔"的应用程序架构。 为什么需要pluggy? 在Python中,我们通常有几种扩展程序行为的方式: ...

gitblog_00153的博客 719

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python插件化开发实战:开发个图片浏览器

支持动态加载插件可以浏览选择图片文件夹以缩略图方式显示JPEG图片使用wxPython构建友好的用户界面。

Winfredzhang的博客 879

【待完成】python插件化开发

https://blog.youkuaiyun.com/python_lqx/article/details/90737076 https://www.jianshu.com/p/6fd5b540418b 最近项目中有不少接口一样但实现逻辑各不相同的组件,想着吧组件搞成插件一样的,这样可以方便编排 先写个名字吧,提醒自己需要学习,等有一些成果了,再把心得贴上来 ...

u011337602的博客 413

python插件化设计importlib中的get_Python-插件化开发

1、动态导入:运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。2、内建函数__import__()def __import__(name, globals=None, locals=None, fromlist=(), level=0):name:模块名import语句本质上就是调用这个函数,但是不鼓励直接使用它,建议使用importlib.import_module()。sys ...

weixin_33186395的博客 279

Python1004-插件化开发

动态导入 运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。 内建函数__import__() __import__(name, globals=None, locals=None, fromlist=(), level=0) name, 模块名 import语句本质上就是调用这个函数。但是不鼓励直接使用它。建议使用importlib.import_module() ...

米娅爸 720
上一篇: Python -- 包管理--打包分发
下一篇: Python -- Git服务器搭建
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值