Python Kodi - 强制Python处理.pyo像.py

时间:2018-01-06 07:14:37

标签: python xbmc kodi

嘿伙计们,我肯定会变得疯狂 我想强制Python处理像.py这样的.pyo 我让kodi xbmc分叉并变得疯狂

我已经试过并改变了多行,没有改变? 我在这里链接他们:

const std::string ADDON_PYTHON_EXT = "*.py"; 将此行更改为* .pyo

return URIUtils::HasExtension(m_strPath, ".py");将此行更改为。 .pyo

我认为编译后就足够了,尝试打开附加组件时仍然没有任何反应

仍然python不会加载.pyo文件,也不会将它们作为.py

处理

btw:我想删除文件夹中的所有.py文件,然后让第一个加载的.py文件在那里1 - > .py和其他都是.pyo附加组件的工作原理。 但删除这个首先加载.py并将其用作.pyo 它失败。 那么我必须改变它总是使用.pyo

首次更新:

我试过了, 它确实可以作为一种解决方法 创建了一个假人 - > include.py 只需1行导入服务就足够了。

但我想直接在kodi解决这个问题。 在文件中 "如果有当前的pyc文件,则将其作为编译版本,因此在运行命令之前不必执行编译步骤。否则读取py文件,编译器必须编译它"

这么容易说, 执行.py如果不可用,请检查.pyo 但我无法找到更改/添加此方法的位置 我甚至找不到适合执行的方法

第二次更新: 我在githublink to file

中添加了这些行
      //pyoextension == script
  std::string pyoextension = script;

  //Check if the file does exist
  if (!CFile::Exists(script, false))
    {
      //pyoextension append o to get -> .pyo
      pyoextension = script + "o";

      //Check if pyoextension exist -> .pyo
      //if not nothing exist throw error
      if (!CFile::Exists(pyoextension, false)){
        CLog::Log(LOGERROR, "%s - Not executing non-existing script %s", __FUNCTION__, script.c_str());
        return -1;
      }
      LanguageInvokerPtr invoker = GetLanguageInvoker(pyoextension);
      return ExecuteAsync(pyoextension, invoker, addon, arguments);
    }
  LanguageInvokerPtr invoker = GetLanguageInvoker(script);
  return ExecuteAsync(script, invoker, addon, arguments);

检查加载项是否不存在.py文件,检查.pyo文件是否存在,然后执行该文件。但仍然检查确实有效,但它仍然会抛出错误,它无法启动脚本

2 个答案:

答案 0 :(得分:0)

更改此行(const std::string ADDON_PYTHON_EXT = "*.py"; changed this line to *.pyo)不是一个好的解决方案

主要原因是kodi被配置为使用.py扩展名从addon.xml文件加载,传统后面跟随所有插件。更改此类头文件只会导致仅在您的自定义构建库中使用插件,您必须修改所有其他插件。

我最喜欢的解决方案是您应该按照以下步骤操作:

  • 在python脚本中创建一个函数(让我们将其称为名为service()的函数,该函数执行名为service.py的文件中的所有必要代码。
  • 现在创建一个python文件(include.py),将其包含在addon.xml中,其中包含以下代码:

<强> include.py

import service
service.service()

答案 1 :(得分:0)

它可能甚至不值得,Kodi很快就会转向python3,而python3放弃了pyo文件。它可能会使用pyc,但现在还不确定。