在XBMC插件中导入resources/中的模块

0 投票
1 回答
2752 浏览
提问于 2025-04-18 11:07

我正在开发一个XBMC插件,这个插件需要一些Python模块,但在addon.xml文件中用requires标签是找不到的(据我所知,它们不在XBMC的库里)。插件开发的文档似乎提到,可以通过把这些模块放到插件目录下的resources/lib子目录来解决这个问题。

我已经这样做了,但在XBMC中测试时,尝试导入这个模块时出现了导入错误,因为找不到这个模块。

我看过StackOverflow上关于这个话题的其他问题,标题是如何在XBMC中导入Python模块以供插件使用,但那里的解决方案是,在导入之前把模块目录添加到路径中,对我来说也不管用。我还是遇到了同样的导入错误。

实际上,我觉得那个回答不太对,因为在XBMC中调用os.getcwd()并不会返回你的插件目录路径;所以把它给的路径和/resources/lib拼接在一起,按照建议的方法是得不到有效路径的。我修改了例子,使用getAddonInfo通过xbmcaddon模块找到插件路径,并把它和/resources/lib拼接在一起,但还是不行。

把模块放到插件目录的根目录下也不行。我没有找到具体的文档来说明如何正确地做这件事,除了最初的教程说要把它放到resources/lib子目录里。

所以,有人知道该怎么做吗?或者有没有其他XBMC插件成功实现这个的例子?

1 个回答

1

我找到了我的错误。我没有注意到我添加的路径。我本应该用 getAddonInfo('path') 来添加插件的路径,而不是用 getAddonInfo('profile') 来添加插件的配置目录。

为了以后参考,如果你想把插件的一个子目录添加到路径中,我是这样做的:

import xbmcaddon
import os
...

my_addon = xbmcaddon.Addon('plugin.video.my_plugin')
addon_dir = xbmc.translatePath( my_addon.getAddonInfo('path') )

sys.path.append(os.path.join( addon_dir, 'resources', 'lib' ) )

import <whatever modules you want>

我想这又是一个教训,让我明白了要仔细关注错误信息的内容。

撰写回答