0

我正在开发一个使用Yapsy作为插件系统后端的程序。用户可以编写自己的插件并在运行时加载它们。我有一个菜单,显示所有加载的插件,每个插件都是自己的菜单项。我还为程序提供了两个预制插件。通过eclipse运行程序时,这些预制插件加载良好(即菜单显示两个插件);但是,在我使用 cx_Freeze 创建可执行文件后,由于某种原因,插件无法正确加载。只找到了第一个插件,这很奇怪,因为两个插件都位于同一个目录中,而且我的代码没有改变。我想知道Yapsy有什么问题吗?为什么它只会找到一个插件,

这是我获取预制插件的方式的示例:

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 完全跳过了第二个插件(仅在运行可执行文件时)。

任何想法为什么我可能会得到这种行为?

谢谢,亚当

4

1 回答 1

2

您描述问题的方式似乎是 yapsy 无法加载您测试过的所有插件中的一个。

如果我不得不猜测,我会说不在 Eclipse 外部加载的插件有一个导入错误(Eclipse 中的导入路径可能不同,并且在 Eclipse 内部尝试时不会发生此导入错误)。

当然,这只是一个疯狂的猜测,为了更深入地调查,您可以通过 Yapsy 以相当标准的方式使用的 Python 日志记录模块显示更多调试信息。

要激活调试级信息,您可以使用以下代码:

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

如果问题仍未解决,您仍然可以使用精简版的插件和插件管理器代码向 Yapsy 的跟踪器提交错误。跟踪器位于: http: //sourceforge.net/tracker/ ?group_id=208383

于 2012-07-31T09:46:09.880 回答