[英]Simplest way to write cross-platform application with Python plugin extensibility?
我正在编写一个应该能够在Linux,Mac OS X,Windows和BSD上运行的应用程序(不一定是单个可执行文件,因此它不必是Java)并且可以使用简单的插件进行扩展。
我希望我的插件实现的方式是一个简单的Python程序,它必须实现某个函数并简单地将字典返回到主程序。
插件安装应该只是将插件脚本文件复制到相对于主可执行文件的./plugins
目录中。
主程序应该是一个独立的可执行文件,在所有上述平台中都有共享代码,但是具有特定于平台的前端(因此Linux和BSD版本只是CLI工具,Windows版本具有C ++和MFC前端) ,Mac OS X版本将有一个Objecive-C和Cocoa前端)。
所以我想这真的有两个问题:
在多个前端之间共享通用控制器代码的最简单方法是:
一种。 Mac上的Objective-C?
湾 Windows上的C ++?
C。 Linux / BSD的C / Python?
从我的通用控制器实现插件以执行自定义插件的最简单方法是什么?
我在这里和fontanini在一起; 使用共享库(DLL)作为控制器逻辑。 最好使用C / C ++,并注意RTTI(dynamic_cast <>和异常处理所需),这可能不适用于DLL边界(例如,您可能无法捕获从另一个DLL中抛出的异常)。
寻找像Qt这样的优秀跨平台库,它们以平台无关的方式提供许多功能(例如文件系统,进程,网络 - 而不仅仅是GUI,你想以任何方式单独开发)。
Python / C API是使Python可以使用C / C ++功能的基础(反之亦然),扩展模块和程序之间的差别很小,它们为嵌入式Python解释器提供了自己的功能。
但是,您可能希望使用包装器生成器(所有这些都基于Python API,但需要的代码少于直接使用它),这使您的生活更轻松。 例如:
共享应用程序的跨平台Python组件的最简单方法可能是将其作为命令行程序实现,然后使用每个前端中的相关系统调用来调用它。 它不是最强大的方式,但它可能就足够了。
如果你希望插件只是一个包含Python代码的文件,我建议它们至少符合约定,例如通过扩展一个类,然后让你的代码使用“import plugin_name”将它们加载到Python运行时。 这比将插件作为单独的程序存在更好,因为您可以以Python类型访问输出,而不需要从标准输入中解析文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.