【发布时间】:2016-06-27 10:17:22
【问题描述】:
在 kivy 论坛没有得到回应,所以在这里尝试。
当我将教程 pong 代码编译为一个文件可执行文件时,我仍必须将 pong.kv 文件包含在同一文件夹中才能运行。 否则,我在启动 exe 时会收到以下错误:
GL:支持 EXT_framebuffer_object [信息] [GL] OpenGL 版本 [信息] [GL] OpenGL 供应商 [信息] [GL] OpenGL 渲染器 [INFO] [GL] OpenGL 解析版本:2、1 [INFO] [GL] 阴影版本 [INFO] [GL] 纹理最大尺寸 [INFO] [GL] 纹理最大单位 [INFO] [Window] 自动添加 sdl2 输入提供程序 [INFO] [Window] 虚拟键盘不允许, 单模,不对接 回溯(最近一次通话最后): 文件“”,第 81 行,在 文件“c:\python34\lib\site-packages\kivy\app.py”,第 802 行,在 跑步 根 = self.build() 文件“”,第 75 行,在构建中 文件“”,第 20 行,在 serveBall 中 AttributeError:“NoneType”对象没有属性“中心” 主要返回 -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 包含在数据列表中,但这没有帮助。
谢谢, -拉杰
【问题讨论】:
-
对于其他数据文件,您建议的方法最终对我有用。但是,为了加载默认的 .kv 文件,我最终调用了 kivy.resource_add_path(resourcePath()) ,其中 resourcePath 在我的 main 部分返回了 sys._MEIPASS(或本地开发路径,如果未编译)。这似乎奏效了;也许你也会?
-
我根据您提供的链接发布了答案。在修改 wiki 之前让我知道这是否有效。谢谢。
-
这真的应该是一个评论,但我没有足够的代表,所以...... Raj 的回答很好而且效果很好,但要记住一件事:你还必须导入以下内容到你的 app.py 文件中(我之前的人可能只是碰巧已经在使用它,因此没有注意到需要导入它,或者认为它太明显而无法提及) import kivy, sys, os.path
标签: python kivy pyinstaller