Kivy 1.9.0 Windows软件包KeyError:'rthooks'

时间:2015-06-26 22:30:10

标签: python kivy pyinstaller

我正在尝试将我的Kivy应用程序打包为Windows,但我遇到了一些问题。 按照kivy docs中的说明,我创建并编辑了spec文件。我既不使用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和K​​ivy 1.9.0。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

更新,2015年10月1日:

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

在Windows上从源代码安装Kivy,而不使用Christoph Gohlke's pre-compiled wheels,这是另一个难以破解的难题,所以在实践中如果你真的渴望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在全局命名空间中,但事实并非如此。

我不知道下一步该做什么。