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

概述

动态导入

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

1. 内建函数 __import__()

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

2. importlib.import_module()

importlib.import_module(name, package=None)
  • 支持绝对导入和相对导入, 如果是相对导入, package 必须设置
# 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 插件化开发所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部