我正在开发一个使用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 完全跳过了第二个插件(仅在运行可执行文件时)。
任何想法为什么我可能会得到这种行为?
谢谢,亚当