【问题标题】:Importing a module in resources/ into an XBMC plugin将 resources/ 中的模块导入 XBMC 插件
【发布时间】:2014-06-26 01:44:47
【问题描述】:

我正在开发一个 XBMC 插件,它需要一些 Python 模块,这些模块无法通过 addon.xml 中的 requires 标记获得(据我所知,它们不在 XBMC 存储库中)。插件开发的文档似乎表明您可以通过将模块添加到插件目录的 resources/lib/ 子目录来做到这一点。

我已经这样做了,在 XBMC 中对其进行测试时,我在尝试导入此模块时遇到导入错误,因为找不到它。

我已经阅读了我在 SO 上找到的关于该主题的另一个问题,题为 Importing a python module into XBMC for use within an addon,但是那里提出的解决方案,即在导入之前将模块目录添加到路径中,对我也不起作用。我得到相同的导入错误。

事实上,我认为这个答案并不正确,因为 XBMC 中的 os.getcwd() 在从插件中调用时不会返回插件目录路径;因此,将它提供的路径与 /resources/lib 连接起来,正如答案所暗示的那样,不会产生有效的路径。我修改了示例以使用 getAddonInfo 通过 xbmcaddon 模块从 Addon 对象中查找插件路径,并将其添加到与 /resources/lib 连接的路径中,但它仍然不起作用。

将模块放入插件目录的根目录也不起作用。除了最初的教程说我应该将它添加到 resources/lib 子目录之外,我还没有找到关于如何正确执行此操作的特定文档。

那么有谁知道如何做到这一点,或者有一个在另一个 XBMC 插件中成功完成的例子?

【问题讨论】:

    标签: python plugins module python-import xbmc


    【解决方案1】:

    找出我的错误。我没有注意我添加的路径。当我应该使用 getAddonInfo('path') 时,我正在使用 getAddonInfo('profile') 将插件配置文件目录添加到 sys.path

    为了将来参考,如果你想将插件的子目录添加到路径中,这就是我所做的:

    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>
    

    我想这是密切关注错误消息内容的又一课。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2020-06-09
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多