首页 > 解决方案 > 带有 PyInstaller 的 Python kivy GUI 的 Python 2.7 单一可执行文件

问题描述

我试图用 pyinstaller 将我的 kivy GUI 应用程序打包成一个可执行文件,但没有成功。乳清我运行 PyInstaller,它会创建一个可执行文件,但是当我运行它时,我收到一个“致命错误”,说“无法执行脚本 myApp”。我在 Windows 上使用 python 2.7。这是我的目录设置:

GUI_DEV\
    -myApp_style.kv  (this is my kivy file)
    -myApp.py (this is my main script)
    -ico.ico  (this is my icon file)
    -myImage.png  (this is an image used by myApp.py)
    rel\
        -myApp.spec  (this is the spec file I am using with pyinstaller)

这是我的 myApp.py 代码:

import kivy
#kivy.require("1.9.0")
from kivy.core.window import Window 
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder
import sys, os

def resourcePath():
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS)

    return os.path.join(os.path.abspath("."))

Builder.load_file('myApp.kv')

class designerLayout(GridLayout):
    part = "123"
    def update(self):
        self.part = value
        self.id_test.text = "hello world: "+str(self.part)    
        return

    def spinner_clicked(self, value):
        self.part = value
        self.id_test.text = "hello world: "+str(self.part)    

class myApp(App):
    def build(self):
        Window.clearcolor = (1,1,1,1)
        Window.size = (930,780)
        return designerLayout()

if __name__ == '__main__':
   kivy.resources.resource_add_path(resourcePath()) # add this line
   calcApp = myApp()

calcApp = myApp()
calcApp.run()

这是我的 myApp.spec 文件:

# -*- mode: python -*- 
from kivy.deps import sdl2, glew
block_cipher = None

a = Analysis(['..\\myApp.py'],
             pathex=['C:\\GUI_DEV\\rel\\MyHiddenImports'],
             binaries=None,
             datas=None,
             hiddenimports=['MyHiddenImports'],
             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 += [('myApp_style.kv', '../myApp_style.kv', 'DATA')]

exe = EXE(pyz, Tree('C:\\GUI_DEV\\','Data'),
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
          name='myApp',
          debug=False,
          strip=False,
          upx=True,
          console=False, icon='C:\\GUI_DEV\\ico.ico' )

然后我运行命令:

python -m PyInstaller myApp.spec

从 GUI_DEV\rel 目录。

关于为什么这不起作用的任何想法?我没有收到任何指向任何特定问题的错误。

标签: pythonkivypyinstaller

解决方案


推荐阅读