1. pluggy 简介
pluggy 在其官网(https://pluggy.readthedocs.io/en/stable/)是这么介绍自己的:
pluggy is the crystallized core of plugin management and hook calling for pytest
言简意赅的说了 pluggy 的作用,以及 pluggy 和 pytest 的关系:
之前 pluggy 是 pytest 的一部分,负责插件管理和钩子(hook)调用,
后来对 pluggy 进行单独发布和维护,
所有的的 python 程序都可以借助 pluggy 让自己支持” 插件 “功能
2. 插件机制实现原理
通过一个简单的代码了解插件机制的原理
定义 hook
调用 hook
执行结果如下
通过这个例子看出,pluggy 中共有三个角色:
hookspec:是 HookspecMarker 的实例,用来装饰 hook 的申明函数
hookimpl :是 HookimplMarker 的实例,用来装饰 hook 的实现函数
pm:是 PluginManager 实例,用来连接 hookspec 和 hookimpl,并完成 hook 调用
pm 在调用 hook 时,定义在不同位置的 hook 实现都会被调用执行,于是产生 “插件” 效果。
在前文《从源码的角度重新认识 pytest》中提到,pytest 包含了大量的内置插件,同时也支持安装第三方发插件,
这些插件都会被 pm 自调用,从而成为pytest 的一部分。
上面这个例子只是进行原理演示的 demo,在实际的场景(比如 pytest)中更加复杂一些,通常软件和插件分属不同的项目,需要分别安装
那么软件是怎么找到插件,并将其注册到pm中的呢?
下一节再看一个稍微复杂但是更加完整的例子
领取专属 10元无门槛券
私享最新 技术干货