在XBMC插件中导入resources/中的模块
我正在开发一个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>
我想这又是一个教训,让我明白了要仔细关注错误信息的内容。