首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python实现插件系统

用Python实现插件系统
EN

Stack Overflow用户
提问于 2011-06-03 22:59:14
回答 2查看 2.5K关注 0票数 9

我正在编写一个应用程序(一个用于“我的世界”的服务器包装器),希望通过插件使其可扩展。我有一个行之有效的系统,但我认为从长远来看,它可能需要改进。

现在,应用程序调用服务器类中的"get_plugins“方法,该方法首先导入名为pluginutils.py的文件(pluginutils.py定义了一个所有插件子类的BasePlugin类),然后遍历cmds目录中的每个.py文件,导入该文件并检查它是否为BasePlugin的子类。如果是,则将其实例存储在字典中,其中键是插件中定义的cmd类变量。每当应用程序从服务器接收到命令时,它都会检查它是否是字典中的键,如果是,则运行存储在字典中的实例的start方法,并将从命令中获取的必要参数传递给该实例。

虽然这样做有效,但我觉得这是一种草率的做法。是否有更好的技术来实现类似于此的系统?我想自己写这个(我不想使用类似zope.interface的东西),因为这是一种学习体验。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-03 23:19:51

在用不同的平台和语言编写了许多不同的插件架构之后,我要说的是,大多数插件系统是如何编写的。

基本上,它归结为你的主机和你的插件需要有某种共同的契约来工作;换句话说,你的主机需要对你的插件有足够的了解,这样它就可以传递或共享插件所需要的任何公共资源,而插件需要对主机有足够的了解,以便与这些资源进行交互。

像您所做的那样,使用基类和派生类来实现这一点是一种非常常见的方法。

票数 2
EN

Stack Overflow用户

发布于 2015-08-26 11:53:17

我建议使用setuptools,因为插件最终会链接到sys.path列表的管理:

http://peak.telecommunity.com/DevCenter/PkgResources

从长远来看,基于分发/打包的解决方案(如setuptools )始终是一个可靠的选择,因为:

  • 您必须在没有冲突或缺少需求的情况下加载插件,即使加载的插件依赖于其他动态依赖项,
  • ,以及在安装和删除包时必须更新可用插件列表的
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6233447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档