簡體   English   中英

使用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前端)。

所以我想這真的有兩個問題:

  1. 在多個前端之間共享通用控制器代碼的最簡單方法是:

    一種。 Mac上的Objective-C?

    Windows上的C ++?

    C。 Linux / BSD的C / Python?

  2. 從我的通用控制器實現插件以執行自定義插件的最簡單方法是什么?

  1. 我在這里和fontanini在一起; 使用共享庫(DLL)作為控制器邏輯。 最好使用C / C ++,並注意RTTI(dynamic_cast <>和異常處理所需),這可能不適用於DLL邊界(例如,您可能無法捕獲從另一個DLL中拋出的異常)。

    尋找像Qt這樣的優秀跨平台庫,它們以平台無關的方式提供許多功能(例如文件系統,進程,網絡 - 而不僅僅是GUI,你想以任何方式單獨開發)。

  2. Python / C API是使Python可以使用C / C ++功能的基礎(反之亦然),擴展模塊和程序之間的差別很小,它們為嵌入式Python解釋器提供了自己的功能。

    但是,您可能希望使用包裝器生成器(所有這些都基於Python API,但需要的代碼少於直接使用它),這使您的生活更輕松。 例如:

    • boost :: python (非常方便和強大,但有一個難以理解的hardcore-C ++實現;-),並且由於過多的模板使用而導致更大的目標代碼),可能使用pyplusplus直接生成boost :: python包裝器代碼來自您的頭文件(不會犧牲調整結果的可能性,例如排除或修改功能簽名)
    • SIP (特別是與[Py] Qt一起開發)
    • Swig (適用於多種腳本語言,但會導致API反映C包被包裝而不是“pythonic”)
    • PyBindGen基於與pyplusplus相同的GCCXML后端,但直接生成純Python / C API代碼,導致更精簡的綁定(但可能沒有開箱即用的所有代碼)
  1. 共享應用程序的跨平台Python組件的最簡單方法可能是將其作為命令行程序實現,然后使用每個前端中的相關系統調用來調用它。 它不是最強大的方式,但它可能就足夠了。

  2. 如果你希望插件只是一個包含Python代碼的文件,我建議它們至少符合約定,例如通過擴展一個類,然后讓你的代碼使用“import plugin_name”將它們加載到Python運行時。 這比將插件作為單獨的程序存在更好,因為您可以以Python類型訪問輸出,而不需要從標准輸入中解析文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM