单击时Kivy应用程序退出

时间:2017-11-11 00:22:27

标签: kivy pyinstaller python-3.6

我一直在尝试使用pyinstaller将一个kivy应用程序转换为exe文件,但它一直给我错误。我完全按照website的说法完成了我必须做的事情。 我在用: Mac mini (Late 2014) 2.6 GHz Intel Core i5 Version 10.12.6 python 3.6.1 PyInstaller: 3.3 Platform: Darwin-16.7.0-x86_64-i386-64bit kivy 1.10.1

这是我的main.py看起来的样子:

import kivy
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):

    def build(self):
        return Label(text='Hello world')
if __name__ == '__main__':
    MyApp().run()

我使用pyinstaller运行以下命令:

pyinstaller -y --clean --windowed --name simple \
  --exclude-module _tkinter \
  --exclude-module Tkinter \
  --exclude-module enchant \
  --exclude-module twisted \
  main.py

它一直给我这个错误: screen shot 2017-11-10 at 2 52 24 pm

我试图忽略它,只是继续做website上所说的话。也就是说,添加树对象:

coll = COLLECT(exe,
               Tree('/Users/mohammadmohjoub/PycharmProjects/Kivy'), 
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='simple')

并运行以下命令: pyinstaller -y --clean --windowed simple.spec

现在它变得最糟糕,因为我得到了与上面相同的错误,以及这个新错误: WARNING: stderr: FileNotFoundError: [Errno 2] No such file or directory: '/Users/mohammadmohjoub/PycharmProjects/Kivy/dist/simple.app/Contents/Resources/lib2to3/Grammar.txt'

screen shot 2017-11-10 at 3 02 14 pm

ModuleNotFoundError错误和FileNotFoundError错误的原因是什么?这是为什么每次我尝试打开应用程序时它立即关闭?如果这不是原因,那么我如何以不会意外关闭的方式构建应用程序?我一直在努力解决这个问题。我真的很感激任何支持。

1 个答案:

答案 0 :(得分:0)

1)对于第一个错误(找不到模块)。我很困惑为什么你使用--exclude-module标志。如果您的项目依赖于这些模块,则需要将它们与脚本一起打包。实际上,您甚至可能需要使用--hidden-import标志来标识pyinstaller可能找不到的那些模块。

https://pyinstaller.readthedocs.io/en/stable/usage.html

此链接提供有关--hidden-import标志的信息。但如果所有路径都设置正确,则可能不需要这样做。但作为一个例子:

pyinstaller -y --clean --windowed --hidden-import=module_name simple.py

注意 您可能需要提供隐藏导入模块的完整路径。您可以使用--paths="path\to\your\module"标志添加它。这将告诉pyinstaller在哪里寻找东西。您还可以将完整文件路径添加到--hidden-import标志。无论哪种方式,您都需要在某处指定完整路径(您也可以在spec文件中编辑pathex变量)。

2)对于第二个错误(找不到文件)。如果您的代码访问外部文件(例如Grammar.txt)。它也需要与pyinstaller捆绑在一起。当pyinstaller编译你的代码时,它会创建一个“dist”目录来运行你的代码,但是你的python脚本(我假设)正在根据原始脚本的相对位置查找这个文件。因此,您需要将文件复制到您的目录,或者在编译时使用--add-data标志。上面的链接也提供了有关该标志的信息。

pyinstaller -y --clean --windowed --add-data="src:dest" simple.py

另一种解决方案是只编辑spec文件以包含所有内容:

a = Analysis(['minimal.py'],
    ...
    datas=[('src/Grammar.txt', '.'), ('another/src/more.txt', '.')]
    hiddenimports=['path_to_import', 'path_to_second_import'],
    ...
    cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
    cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)
app = BUNDLE(...)

然后你可以这样做:pyinstaller your.spec

有关规范文件的更多信息:https://pyinstaller.readthedocs.io/en/stable/spec-files.html