Kivy 1.9.0 Windows 包 KeyError: 'rthooks'

Posted

技术标签:

【中文标题】Kivy 1.9.0 Windows 包 KeyError: \'rthooks\'【英文标题】:Kivy 1.9.0 Windows package KeyError: 'rthooks'Kivy 1.9.0 Windows 包 KeyError: 'rthooks' 【发布时间】:2015-09-13 23:46:59 【问题描述】:

我正在尝试为 Windows 打包我的 Kivy 应用程序,但遇到了一些问题。 按照kivy docs 中的说明,我创建并编辑了规范文件。我既不使用 pygame 也不使用 SDL2(我的意思是我不直接导入它们来运行我的程序),但在 Kivy 日志中我看到 pygame 仍然提供我的窗口:

[INFO              ] [Text        ] Provider: pygame
[INFO              ] [Window      ] Provider: pygame

我不明白为什么,因为我使用的是 kivy 1.9.0。

也就是说,我在构建规范时遇到了这个问题:

(...)
202 WARNING: stderr:    File "C:\Program Files\Python Kivy-1.9.0-py3.4-win32-x86\kivy34\kivy\tools\packaging\pyinstaller_hooks\__init__.py", line 13, in install_hooks
    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
202 WARNING: stderr:    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
    KeyError: 'rthooks'
202 WARNING: stderr: KeyError: 'rthooks'

我对编辑规范有点困惑(我需要导入 pygame/SDL2?),这可能是我的问题。我正在使用 Windows 7 x86、Python 3.4.3 和 Kivy 1.9.0。 任何帮助表示赞赏。

【问题讨论】:

我已将其缩小到.spec 文件中的install_hooks(globals()) 行。如果我注释掉这一行,构建会继续进行(尽管 Kivy 没有被包括在内,所以产生的 .exe 什么都不做)。任何人都可以追查到这一点之外的问题吗? 您可能想要提交文档中所述的错误Python 3.3+ 支持仍处于试验阶段 好主意。我现在才这样做:github.com/kivy/kivy/issues/3622 【参考方案1】:

2015 年 10 月 1 日更新:

It turns out this is a bug. 截至 2015 年 9 月 24 日,Kivy 的最新开发版本应该没有这个问题。

在不使用Christoph Gohlke's pre-compiled wheels 的情况下从源代码在 Windows 上安装 Kivy 是另一个难以破解的难题,因此在实践中,如果您真的渴望与 Python 3.x 兼容,最好等到 Kivy 团队发布1.9.0 之后的另一个版本,以及用于生成易于安装的二进制文件的 Gohlke 脚本。


我已经部分解决了这个问题:

您引用的kivy docs 提到将以下三行添加到.spec 文件的顶部:

from kivy.tools.packaging.pyinstaller_hooks import install_hooks
import os
install_hooks(globals())

错误发生在install_hooks(globals()),定义在\Lib\site-packages\kivy\tools\packaging\pyinstaller_hooks\__init__.py

from os.path import dirname, join
from functools import partial

curdir = dirname(__file__)

def install_hooks(sym, hookspath=None):

    _hookspath = [curdir]
    if hookspath is not None:
        _hookspath += hookspath

    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
    sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)

但倒数第二行导致消息:WARNING: stderr: KeyError: 'rthooks'

所以看起来它期望变量 rthooks 位于全局命名空间中,但事实并非如此。

我不确定下一步该做什么。

【讨论】:

GitHub 页面中建议的修复解决了最初的问题。不过,又出现了一个。在构建 exe 时,该程序似乎试图在 ..\dist\MyApp\kivy_install\data\data\style.kv (kv 文件中的 ttf?)中找到一个 ttf 文件(我不使用它)。我想我真的需要等待另一个版本......谢谢。 =)

以上是关于Kivy 1.9.0 Windows 包 KeyError: 'rthooks'的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - 在 Windows 上创建包

Kivy 1.9.1 Windows 包 .spec 单个 exe

kivy 有没有windows64位安装包

在 Mac OS X 上用于 Python 3 的 Kivy

从 OSX 为 Windows 创建 Kivy 包

Kivy,Python:我无法减小 PyInstaller 生成的包的大小