我已经试过并改变了多行,没有改变? 我在这里链接他们:
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文件是否存在,然后执行该文件。但仍然检查确实有效,但它仍然会抛出错误,它无法启动脚本
答案 0 :(得分:0)
更改此行(const std::string ADDON_PYTHON_EXT = "*.py"; changed this line to *.pyo
)不是一个好的解决方案
主要原因是kodi被配置为使用.py
扩展名从addon.xml
文件加载,传统后面跟随所有插件。更改此类头文件只会导致仅在您的自定义构建库中使用插件,您必须修改所有其他插件。
我最喜欢的解决方案是您应该按照以下步骤操作:
service()
的函数,该函数执行名为service.py
的文件中的所有必要代码。include.py
),将其包含在addon.xml
中,其中包含以下代码:<强> include.py 强>
import service
service.service()
答案 1 :(得分:0)
它可能甚至不值得,Kodi很快就会转向python3,而python3放弃了pyo文件。它可能会使用pyc,但现在还不确定。