# 使用 Setuptools 注册多个 Pluggy 插件

DDD
发布: 2025-09-01 22:08:01
原创
720人浏览过

# 使用 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,应该能够看到两个插件都成功运行:

佳可商务购物程序 2004
佳可商务购物程序 2004

在原版的基础上做了一下修正评论没有提交正文的问题特价商品的调用连接问题去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正主题添加问题商家注册页导航连接问题销售排行不能显示更多问题热点商品不能显示更多问题增加了服务器探测 增加了空间使用查看 增加了在线文件编辑增加了后台管理里两处全选功能更新说明:后台的部分功能已经改过前台

佳可商务购物程序 2004 0
查看详情 佳可商务购物程序 2004
$ 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 的插件注册规则。遵循这些步骤,可以构建可扩展且灵活的应用程序。

登录后复制

以上就是# 使用 Setuptools 注册多个 Pluggy 插件的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号