【问题标题】:Python Kodi - Force Python handling .pyo like .pyPython Kodi - 强制 Python 像 .py 一样处理 .pyo
【发布时间】:2018-01-06 07:14:37
【问题描述】:

嘿,伙计们,我肯定要疯了 我想强制 Python 像 .py 一样处理 .pyo 我得到了 kodi xbmc 分叉并变得疯狂

我已经尝试并更改了多行,但没有任何改变? 我把它们链接在这里:

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

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

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

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

顺便说一句:我想出删除文件夹中的所有 .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 文件是否存在,然后执行。但是检查仍然有效,但仍然会抛出无法启动脚本的错误

【问题讨论】:

    标签: python xbmc kodi


    【解决方案1】:

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

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

    我最喜欢的解决方案是您应该遵循以下步骤:

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

    include.py

    import service
    service.service()
    

    【讨论】:

    • 谢谢,我更新了我的问题。确实,您的解决方法非常感谢您
    • 如果它对您有帮助,您可以投票并接受它作为答案
    • 已经尝试过了,很抱歉得到此输出“感谢您的反馈!声望低于 15 人的投票已记录,但不要更改公开显示的帖子得分。”
    • 我投了赞成票,但这仍然不是我想要抱歉的答案。这是一种解决方法,但没有回答如何完成我希望 CPython 检查并运行 .pyo 文件(如果存在)的方式。我现在尝试了不同的方法,但它仍然不起作用。我更新了我的问题
    • 因此,我想强制 CPython 直接用于第一次执行(.py 文件),如果它不存在,如果它已经编译,则不使用 .pyc / .pyo 将其编译为字节码
    【解决方案2】:

    这甚至可能不值得,Kodi 很快就会迁移到 python3,并且 python3 删除了 pyo 文件。那时它可能会使用 pyc,但现在还不确定。

    【讨论】:

    • kodi 仅在新版本中转向 python3,pyo 和 pyc 也不过是 python 编译的字节码。作为一种方式,我建议它在kodi中是python3还是python2都不会产生任何影响
    • 不是一个有帮助的答案,因为我想弄清楚 python 在哪里检查 .pyo 文件,我可以像我希望的那样对其进行编辑。你的回答只是说它不值得大声笑。
    • 对,但您可能不知道 python 3 端口,因此您的工作可能会白费。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2021-10-13
    • 2012-11-25
    相关资源
    最近更新 更多