[英]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.