值得一看
广告
彩虹云商城
广告

热门广告位

# 使用 Setuptools 注册多个 Pluggy 插件

# 使用 Setuptools 注册多个 Pluggy 插件

本文介绍了如何使用 Setuptools 正确注册多个 Pluggy 插件,以便它们可以协同工作。核心在于理解 Pluggy 插件的命名规则,以及如何通过 Entry Points 将插件正确地注册到 PluginManager 中。通过修改 `pyproject.toml` 文件中的 Entry Point 名称,确保每个插件都有唯一的名称,从而实现多个插件的串行执行。
## Pluggy 插件注册原理
Pluggy 允许开发者创建可扩展的应用程序,通过插件机制增加功能。在使用 `load_setuptools_entrypoints` 函数加载插件时,Pluggy 依赖于 Setuptools 的 Entry Points 机制。理解 Entry Points 的工作方式是成功注册多个插件的关键。
每个插件都需要在 `pyproject.toml`(或 `setup.py`)文件中定义一个 Entry Point。Entry Point 声明了插件的入口点,Pluggy 通过这些入口点找到并加载插件。
## 解决插件冲突问题
在使用 `load_setuptools_entrypoints` 时,如果多个插件使用相同的 Entry Point 名称,Pluggy 只会注册最后一个加载的插件。这是因为 Pluggy 内部使用插件名称作为唯一标识符。
为了解决这个问题,必须确保每个插件都有唯一的 Entry Point 名称。这意味着,在 `pyproject.toml` 文件中,`[project.entry-points.pluggable]` 下的每个条目都应该有不同的名称。
## 正确配置 pyproject.toml
以下是如何修改 `plugin_a/pyproject.toml` 和 `plugin_b/pyproject.toml` 文件,以确保每个插件都有唯一名称的示例:
**plugin_a/pyproject.toml:**
“`toml
[project]
name = “plugin_a”
version = “1.0.0”
dependencies = [“pluggy==1.3.0”, “pluggable”]
[project.entry-points.pluggable]
plugin_a = “a” # 修改 entry point 名称为 plugin_a

plugin_b/pyproject.toml:

[project]
name = "plugin_b"
version = "1.0.0"
dependencies = ["pluggy==1.3.0", "pluggable"]
[project.entry-points.pluggable]
plugin_b = "b" # 修改 entry point 名称为 plugin_b

注意,Entry Point 的名称(例如 plugin_a 和 plugin_b)需要与插件的实际名称相对应,并且必须是唯一的。

修改 Pluggable 主程序

虽然不是强制性的,但建议在 pluggable.py 中使用 add_hookspecs() 方法将 hook 规范添加到 PluginManager 中。这有助于 Pluggy 验证插件实现是否符合规范。

# pluggable/pluggable.py
import pluggy
NAME = "pluggable"
impl = pluggy.HookimplMarker(NAME)
@pluggy.HookspecMarker(NAME)
def run_plugin():
pass
def main():
m = pluggy.PluginManager(NAME)
m.add_hookspecs(sys.modules[__name__]) # 添加 hook 规范
m.load_setuptools_entrypoints(NAME)
m.hook.run_plugin()
if __name__ == "__main__":
import sys
main()

验证插件注册

完成上述修改后,重新安装插件并运行 pluggable.py,应该能够看到两个插件都成功运行:

$ python -m venv venv
...
$ venv/bin/pip install -e pluggable -e plugin_a -e plugin_b
...
Successfully installed pluggable-1.0.0 plugin-a-1.0.0 plugin-b-1.0.0
$ venv/bin/python pluggable/pluggable.py
run from b
run from a

注意事项

  • 插件命名: 确保每个插件都有唯一的名称,这包括 pyproject.toml 文件中的 name 字段和 Entry Point 的名称。
  • Hook 规范: 建议使用 add_hookspecs() 方法将 hook 规范添加到 PluginManager 中,以提高代码的健壮性。
  • 依赖管理: 确保所有插件都声明了正确的依赖关系,包括 pluggy 和宿主应用程序。

总结

通过正确配置 pyproject.toml 文件中的 Entry Points,可以成功注册多个 Pluggy 插件,并使它们协同工作。关键在于确保每个插件都有唯一的名称,并遵循 Pluggy 的插件注册规则。遵循这些步骤,可以构建可扩展且灵活的应用程序。

温馨提示: 本文最后更新于2025-09-01 22:28:13,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容