2012-07-30 66 views
0

我正在使用Yapsy作爲插件系統的後端程序。用戶可以編寫自己的插件並在運行時加載它們。我有一個菜單,顯示所有加載的插件,每個插件都是自己的菜單項。我還提供兩個預製插件程序。當通過eclipse運行程序時,這些預製插件加載正常(即菜單顯示兩個插件);然而,在我創建一個可執行文件後,使用cx_Freeze,出於某種原因,插件無法正確加載。只找到第一個插件,這很奇怪,因爲兩個插件都駐留在同一個目錄中,並且代碼在我的末尾沒有更改。我想知道Yapsy是否有問題?爲什麼它只能找到一個插件,當它們都在同一個目錄中時(僅在使用cx_Freeze創建可執行文件之後)?Yapsy通過eclipse與cx_Freeze可執行文件查找插件

這裏是我得到的預先製作的插件方式的一例:

default_dir = os.path.expanduser('~') + os.sep + "plugins" 

if xml.get_plugin_directory() == "": 
    directory = [default_dir] # no user specified directory 
else: 
    directory = [default_dir, xml.get_plugin_directory()] # user specified dir too 

# Load the plugins from the specified plugin directory/s. 
manager = PluginManager() 
manager.setPluginPlaces(directory) 
manager.setPluginInfoExtension('plugin') 
manager.collectPlugins() 

for plugin in manager.getAllPlugins(): 
    ... 

正如你所看到的,我設置的默認目錄(它總是應該已經創建和我測試過這以確保),然後通過yapsy.PluginManager().setPluginPlaces(directory)將插件位置設置到該目錄或該目錄以及用戶指定的目錄。默認的插件位置不在我的eclipse工作區中;它駐留在別的地方。正如我之前所說的,這在通過Eclipse運行程序時工作正常,但是一旦我創建了可執行文件,就只能找到其中一個插件。我期望在沒有找到插件的情況下出現錯誤,但這很奇怪,確實發現了一個插件,而不是其他插件。另外,如果我將更多測試插件文件添加到默認目錄,則會找到這些文件。這幾乎就像Yapsy完全跳過第二個插件(僅在運行可執行文件時)。

任何想法,爲什麼我可能會得到這種行爲?

感謝, 亞當

回答

2

你描述你的問題的方式,似乎yapsy不能只加載所有你測試過的插件之一。

如果我不得不猜測,我會說在Eclipse之外不加載的插件有導入錯誤(可能導致Eclipse中的導入路徑不同,並且導入錯誤在內部嘗試時不會發生蝕)。

當然,這只是一個瘋狂的猜測,爲了深入研究,您可以通過Yapsy以相當標準的方式使用Python日誌記錄模塊來顯示更多調試信息。

要激活調試級別的信息,你可以使用下面的代碼:

import logging 
logging.basicConfig(level=logging.DEBUG) 

如果問題仍然沒有解決,你仍然可以提交bug到Yapsy的跟蹤與您的插件strimmed下來版和插件管理器代碼。跟蹤器位於:http://sourceforge.net/tracker/?group_id=208383

+0

謝謝Thibauld Nion!這很令人頭疼,但正如你指出的那樣,這是一個導入錯誤。 cx_Freeze不包括scipy庫,這是特定插件使用的庫之一。這似乎解決了我的問題。謝謝。 – adchilds 2012-07-31 15:06:06