使用 pyinstaller 打包后 Kivy 应用程序崩溃

Posted

技术标签:

【中文标题】使用 pyinstaller 打包后 Kivy 应用程序崩溃【英文标题】:Kivy app crashes after packaging with pyinstaller 【发布时间】:2015-09-24 10:58:51 【问题描述】:

以下是我一直面临的问题的一些提示:

正在尝试打包 Kivy 附带的example app。 我可以通过命令行正常运行应用程序 [kivy main.py] 当我尝试使用 Pyinstaller 打包应用程序时,会生成 spec 文件,并且可以打包应用程序,但这是我在警告文本文件中看到的:http://pastebin.com/3D2A9ZLG 之后应用程序无法启动,这是我在控制台日志中看到的错误:(com.apple.xpc.launchd.oneshot.0x10000028.day2[6584]) Service exited with abnormal code: 1

Kivy 安装

使用下载附带的 DMG 在 Mac OS X Yosemite 上安装 Kivy 1.9.0。并使用 sudo 用户运行 MakeSymbols 脚本。 Kivy 当前安装在 Applications 文件夹中 正在使用 Pyinstaller 2.0,方法是从他们的 Github 存储库下载代码并运行 kivy pyinstaller --windowed --name guide main.py 我使用的是 Python 2.7

代码:

这是我尝试使用示例创建的应用程序的规范文件:

# -*- mode: python -*-

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

a = Analysis(['/Users/karthik/Desktop/SHRINK/kivy/examples/guide/quickstart/main.py'],
             pathex=['/Users/karthik/Desktop/SHRINK/pyinstaller-2.0'],
             hiddenimports=[])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=1,
          name=os.path.join('build/pyi.darwin/day2', 'day2'),
          debug=False,
          strip=None,
          upx=True,
          console=False )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=None,
               upx=False,
               name=os.path.join('dist', 'day2'))
app = BUNDLE(coll,
             name=os.path.join('dist', 'day2.app'))

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我可以看到几个问题,您正在使用 os 库而没有导入它,这应该会导致一些问题,根据此处:(http://kivy.org/docs/guide/packaging-windows.html) 您需要在 COLLECT 语句中包含路径,以便 kivy 可以找到一切。

coll = COLLECT( exe, Tree('../kivy27/examples/demo/touchtracer/'),
           a.binaries, Tree([f for f in os.environ.get('KIVY_SDL2_PATH', '').split(';') if 'bin' in f][0])
           #...
           )

Kivy 1.9.0 也使用 SDL2 而不是 Pygame,因此您还需要将 pyinstaller 链接到它。以我的经验,Kivy 通过 Pyinstaller 工作时非常喜怒无常,所以我建议尝试按照我上面发布的链接进行操作。

【讨论】:

以上是关于使用 pyinstaller 打包后 Kivy 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

PyInstaller 3.2.1 与 Kivy 1.10.0 pyz 语法错误并且不打包

在使用 PyInstaller --onefile 打包 kivy 时包含 .kv/.json 文件?

如何从我的 kivy 应用程序(Pyinstaller)获取 Windows 可执行文件?

在 OSX Yosemite 上打包 Kivy Python 应用程序不起作用

Pyinstaller 不包括 google-api-python-client

将 kivy 应用程序打包到一个 exe 中