我正在尝试将我的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和Kivy 1.9.0。 任何帮助表示赞赏。
答案 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
在全局命名空间中,但事实并非如此。
我不知道下一步该做什么。