我是靠谱客的博主 顺利冰棍,这篇文章主要介绍Python 插件化开发,现在分享给大家,希望可以做个参考。

动态导入

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

1. 内建函数 __import__()

复制代码
1
2
__import__(name, globals=None, locals=None, fromlist=(), level=0)
  • name 指代 模块名
  • import 语句本质上就是调用这个函数, 不鼓励直接使用它, 建议使用importlib.import_module()
  • __import__(‘sys’) 等价于 import sys

2. importlib.import_module()

复制代码
1
2
importlib.import_module(name, package=None)
  • 支持绝对导入和相对导入, 如果是相对导入, package 必须设置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# t8.py class A: def showme(self): print('test') # 主程序模块 t10.py import importlib def plugin(plugin_name:str, sep=':'): m, _, c = plugin_name.partition(sep) mod = importlib.import_module(m) cls = getattr(mod, c) return cls() if __name__ == '__main__': a = plugin('t8:A') a.showme()
  • 上面的例子就是插件化编程的核心代码

插件化编程技术

1. 依赖的技术

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

2. 加载的时机

什么时候加载合适呢 ?
程序启动的时候, 还是程序运行中呢 ?

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

两种方式各有利弊, 如果插件过多, 会导致程序启动很慢, 如果用户需要时再加载, 插件太大或者依赖太多, 插件启动也会很慢
所以先加载必须的, 常用的插件, 其他插件使用时再动态载入

3.应用

  • 软件的设计不可能尽善尽美, 或者在某些功能上不够专业, 需要专业的客户自己增强, 比如Photoshop 的滤镜插件
  • Notepad ++ , 他只需要做好一个文本编辑器即可, 其他增强功能都可以通过插件化的方式提供
  • 定义规范, 定义插件从哪里加载, 如何加载, 必须实现的功能等
  • 插件是把模块加载到系统中运行它, 增强当前系统功能, 或者提供系统不具备的功能, 旺旺插件化技术应用在框架爱设计中, 系统本身设计简单化, 轻量级, 实现基本功能后, 其他功能通过插件加入进来i,方便扩展

最后

以上就是顺利冰棍最近收集整理的关于Python 插件化开发的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(102)

评论列表共有 0 条评论

立即
投稿
返回
顶部