2012-04-20 46 views
0

我正在编写一个应该能够在Linux,Mac OS X,Windows和BSD上运行的应用程序(不一定是单个可执行文件,因此它不必是Java),并且可以使用简单的插件进行扩展。用Python插件扩展性编写跨平台应用程序的最简单方法是什么?

我想要我的插件被实现的方式是作为一个简单的Python程序,它必须实现一个特定的功能,并简单地返回一个字典到主程序。

插件安装应该只是将插件脚本文件复制到相对于主可执行文件的./plugins目录中。

主程序应该是一个独立的可执行程序,在所有上述平台中都有共享代码,但是平台特定的前端(所以Linux和BSD版本只是CLI工具,Windows版本有C++和MFC前端,而Mac OS X版本将有一个Objecive-C和Cocoa前端)。

所以我想这真是两个问题:

  1. 什么之间多前从结束共享通用控制器代码最简单的方法:

    一个。 Mac上的Objective-C?

    b。 Windows上的C++?

    ℃。来自Linux/BSD的C/Python?

  2. 从我的通用控制器实现插件来执行自定义插件最简单的方法是什么?

回答

2
  1. 我与fontanini这里;为控制器逻辑使用共享库(DLL)。因此,最好使用C/C++,并注意RTTI(dynamic_cast <>和异常处理所需的),这可能不适用于跨越DLL边界(例如,捕获从另一个DLL中抛出的异常时可能会遇到问题)。

    寻找像Qt这样的良好的跨平台库,它提供了许多功能(例如文件系统,进程,网络 - 不仅仅是GUI,您希望单独开发GUI)以平台不可知的方式。

  2. Python/C API是为Python提供C/C++功能的基础(反之亦然),扩展模块和为嵌入式Python解释器提供自己功能的程序之间只有很小的差异。

    但是,您可能希望使用包装生成器(所有这些都基于Python API,但需要的代码少于直接使用它的代码),这可以让您的生活更轻松。实例是:

    • boost::python(这是非常方便的和强大的,但是有一个难以理解的铁杆-C++实现;-),并且导致更大的目标代码由于过度模板使用),可能使用pyplusplus来生成升压:: python封装代码直接从您的头文件(不牺牲调整结果的可能性,例如排除或修改功能签名)
    • SIP(特别是与它开发的[Py] Qt相结合)
    • Swig(这适用于多种脚本语言,但会导致API镜像被封装的C API而不是“pythonic”)
    • PyBindGen它基于与pyplusplus相同的GCCXML后端,但直接生成纯Python/C API代码,从而导致更精简的绑定(但可能无法搜索所有代码的盒子)
0
  1. 共享应用程序的跨平台的Python的成分很可能会实现它作为一个命令行程序,然后使用相关系统中的每个调用调用它的简单方式的前端。这不是最稳健的方式,但它可能就足够了。

  2. 如果你想插件只是一个包含Python代码的文件,我会建议他们至少符合一个约定,例如,通过扩展一个类,然后让你的代码使用“import plugin_name”将它们加载到Python运行时。这比将插件作为单独的程序存在会更好,因为您可以以Python类型访问输出,而不需要从标准输入解析文本。

相关问题