使用 Python 插件可扩展性编写跨平台应用程序的最简单方法
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前端)。
所以我想这实际上是两个问题:
- 在
多个前端之间共享公共控制器代码的最简单方法是什么:
a. Mac上的Objective-C?
b. C++在Windows上?
c. 来自 Linux/BSD 的 C/Python?
从我的公共控制器实现插件以执行自定义插件的最简单方法是什么?
-
我在这里使用fontanini;使用共享库(DLL)作为控制器逻辑。 最好使用 C/C++,并小心使用 RTTI(dynamic_cast<>和异常处理需要),它可能无法跨 DLL 边界工作(例如,您可能在从一个 DLL 中从另一个 DLL 捕获一个 DLL 中抛出的异常时遇到问题)。
寻找像Qt这样的好的跨平台库,它以与平台无关的方式提供了许多功能(例如文件系统,进程,网络 - 而不仅仅是GUI,无论如何你都想单独开发)。
Python/C API 是使 C/C++ 功能可供 Python 使用的基础(反之亦然),扩展模块和为嵌入式 Python 解释器提供自身功能的程序之间几乎没有区别。
但是,您可能希望使用包装生成器(所有这些都基于 Python API,但比直接使用它需要更少的代码)来使您的生活更轻松。 例如:
- boost::p ython(非常方便和强大,但有一个难以理解的硬核C++实现;-),并且由于过度使用模板而导致更大的目标代码),可能使用 pyplusplus 直接从您的头文件生成 boost::p ython 包装器代码(不牺牲调整结果的可能性,例如排除或修改函数签名)
- SIP(特别是与[Py]Qt一起开发)
- Swig(适用于多种脚本语言,但会导致API镜像C API被包装而不是"pythonic")
- PyBindGen 基于与 pyplusplus 相同的 GCCXML 后端,但直接生成纯 Python/C API 代码,导致更精简的绑定(但可能不会开箱即用地找到所有代码)
-
共享应用程序的跨平台 Python 组件的最简单方法可能是将其实现为命令行程序,然后使用每个前端中的相关系统调用来调用它。这不是最强大的方法,但可能就足够了。
-
如果您希望插件只是一个包含 Python 代码的文件,我建议它们至少符合约定,例如通过扩展类,然后使用"import plugin_name"将它们加载到 Python 运行时。这比将插件作为单独的程序存在要好,因为您将能够以 Python 类型访问输出,而不需要从标准输入中解析文本。
- boost::variant - 对变体应用算术的最简单方法
- 多线程 gtkmm 应用程序最简单的示例
- 如何使用cmake和Visual Studio 2019编译简单的Windows应用程序?
- C++ 无法链接最基本的应用程序
- 使用提升过程编译简单的应用程序会生成错误
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- 将UWP应用程序的简单INT发送到另一个程序
- 简单的多播应用程序无法在同一网络上的不同计算机上运行
- 使用 valgrind 的地块测量 c++ 应用程序的最大内存使用量(堆栈和堆)
- 是否有一种简单的方法可以从普通的 win32 C++代码向应用程序见解提供数据?
- 应用程序最小化时单击显示桌面/最小化全部
- 在Win7 x64上编译Qt应用程序的最简单方法
- 在C++glib应用程序中连接到dbus信号的最简单方法
- 使用 Python 插件可扩展性编写跨平台应用程序的最简单方法
- 这是为Android和iOS迁移C++应用程序的最简单方法
- 为什么当我的应用程序最小化时CPU使用率会增加
- 用户界面-向C++应用程序添加GUI的最简单方法
- 如何使用预处理器定义向应用程序添加简单调试
- 使用Qt Creator交叉编译Qt应用程序的简单方法