在kivy论坛没有得到响应,所以试着在这里。Kivy:编译成单个可执行文件
当我将教程pong代码编译为一个文件可执行文件时,我仍然必须将pong.kv文件包含在相同的文件夹中才能运行。 否则,启动exe文件时,我得到了以下错误:
GL: EXT_framebuffer_object is supported [INFO ] [GL ] OpenGL version [INFO ] [GL ] OpenGL vendor [INFO ] [GL ] OpenGL renderer [INFO ] [GL ] OpenGL parsed version: 2, 1 [INFO ] [GL ] Shading version [INFO ] [GL ] Texture max size [INFO ] [GL ] Texture max units [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked Traceback (most recent call last): File "", line 81, in File "c:\python34\lib\site-packages\kivy\app.py", line 802, in run root = self.build() File "", line 75, in build File "", line 20, in serveBall AttributeError: 'NoneType' object has no attribute 'center' main returned -1
我怎样才能得到它作为一个可执行文件运行。这是我的pong.spec文件:
# -*- mode: python -*-
from kivy.deps import sdl2, glew
block_cipher = None
a = Analysis(['Code\main.py'],
pathex=['E:\\Development\\Pong'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
a.datas += [('Code\pong.kv', 'E:\\Development\\Pong\Code\pong.kv', 'DATA')]
exe = EXE(pyz,Tree('Code'),
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
name='pong',
debug=False,
strip=False,
upx=True,
console=True , icon='pong.ico')
请注意,我试图将pong.kv包含在数据列表中,但没有帮助。
感谢, -Raj
我听说这是可能的,也有一些人做到了,但即使有这些,我也没有运气:[1](http://irwinkwan.com/2013/04/29/python-executables-pyinstaller-and - 48小时游戏设计组合/),[2](http://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile)。虽然看起来像是一个矫枉过正(因为.exe大小),但应该记录正在运行的'onefile'选项。 – KeyWeeUsr
对于其他数据文件,您建议的方法最终会为我工作。但是,为了加载默认的.kv文件,我最终调用了kivy.resource_add_path(resourcePath()),其中resourcePath在__main__部分返回了sys._MEIPASS(或者未编译时的本地开发路径)。这似乎工作;也许会为你呢? – Raj
我希望它会。您可以用简单的例子将[onefile]打包步骤附加到[docs](https://kivy.org/docs/guide/packaging-windows.html)/ [wiki](https://github.com/kivy/) kivy/wiki)如果该exe可以处理所有资源和'.kv'?我认为能够将它放在那里供将来参考是很好的。 – KeyWeeUsr