我正在开发一个使用Yapsy作为插件系统后端的程序。用户可以编写自己的插件并在运行时加载它们。我有一个菜单显示所有加载的插件,每个插件都是自己的menuitem。我还提供了两个预制的插件与程序。这些预先制作的插件在通过eclipse运行程序时加载正常(即菜单显示两个插件);但是,在我使用cx_Freeze创建可执行文件后,由于某种原因,插件无法正确加载。只找到第一个插件,这很奇怪,因为两个插件都位于同一个目录中,并且代码在我的末尾没有被更改。我想知道Yapsy有什么问题吗?为什么它只是找到一个插件,当它们都在同一个目录中时(仅在用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():
...
正如你所看到的,我设置了默认目录(它总是应该已经创建并且我已经对此进行了测试以确保),然后通过{将插件位置设置为该目录或该目录以及用户指定的目录{1}}。默认的插件位置不在我的eclipse工作区中;它驻留在其他地方。正如我之前所说,在通过Eclipse运行程序时这很好用,但是一旦我创建了一个可执行文件,就只能找到其中一个插件。我期待一个错误,没有找到插件,但奇怪的是,确实找到了一个,而不是另一个。此外,如果我将更多测试插件文件添加到默认目录,则会找到这些文件。这几乎就像Yapsy完全跳过第二个插件(仅在运行可执行文件时)。
为什么我可能会遇到这种行为?
谢谢, 亚当
答案 0 :(得分:2)
您描述问题的方式似乎是yapsy无法只加载您测试过的所有插件中的一个。
如果我不得不猜测我会说不在Eclipse外部加载的插件有导入错误(Eclipse中的导入路径可能不同,并且在Eclipse中尝试时不会发生此导入错误)。
当然,这只是一个疯狂的猜测,为了更深入地调查,您可以通过Yapsy以相当标准的方式使用的Python日志记录模块显示更多调试信息。
要激活调试级别信息,您可以使用以下代码:
import logging
logging.basicConfig(level=logging.DEBUG)
如果问题仍未解决,您仍然可以使用插件和插件管理器代码的严格版本向Yapsy的跟踪器提交错误。跟踪器位于:http://sourceforge.net/tracker/?group_id=208383