pyinstaller exe黑屏

pyinstaller exe blank screen

我使用 PyInstaller 在 Windows10 上构建了一个 .exe。当我 运行 可执行文件时, window 打开但它不显示任何小部件,只有一个空白屏幕。据我所知,输出没有显示任何错误。使用 python 2.7 (Enthought Canopy) 和 Kivy 1.9.1。当我 运行 原始源文件时,一切正常;只有 .exe 失败了。

我的 .spec 文件如下所示:

# -*- mode: python -*-
from kivy.deps import sdl2, glew, gstreamer

block_cipher = None

a = Analysis(['C:\Users\Christiaan\Documents\lifeq_dp_pp_p\toolbox\ui\data_importer\PhoenixKv.py'],
         pathex=['C:\Users\Christiaan\Documents\Phoenix'],
         binaries=None,
         datas=[('C:\Users\Christiaan\Documents\lifeq_dp_pp_p\toolbox\ui\data_importer\dev_ids.json', '.'), ('C:\Users\Christiaan\Documents\lifeq_dp_pp_p\toolbox\ui\data_importer\ref_ids.json', '.')],
         hiddenimports=['sqlalchemy.ext.hybrid'],
         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)
exe = EXE(pyz,
      a.scripts,
      exclude_binaries=True,
      name='phoenix',
      debug=True,
      strip=False,
      upx=False,
      console=True )
coll = COLLECT(exe, Tree('C:\Users\Christiaan\Documents\lifeq_dp_pp_p'),
           a.binaries,
           a.zipfiles,
           a.datas + [('dev_ids.json', 'C:\Users\Christiaan\Documents\lifeq_dp_pp_p\toolbox\ui\data_importer\', 'DATA'), ('ref_ids.json', 'C:\Users\Christiaan\Documents\lifeq_dp_pp_p\toolbox\ui\data_importer\', 'DATA')],
           *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
           strip=False,
           upx=False,
           name='phoenix')

我在 运行ning 时的输出是:

PyInstaller Bootloader 3.x
LOADER: executable is         C:\Users\Christiaan\Documents\Phoenix\dist\phoenix\phoenix.exe
LOADER: homepath is C:\Users\Christiaan\Documents\Phoenix\dist\phoenix
LOADER: _MEIPASS2 is NULL
LOADER: archivename is  C:\Users\Christiaan\Documents\Phoenix\dist\phoenix\phoenix.exe
LOADER: No need to extract files to run; setting extractionpath to homepath
LOADER: SetDllDirectory(C:\Users\Christiaan\Documents\Phoenix\dist\phoenix)
LOADER: Already in the child - running user's code.
LOADER: Python library: C:\Users\Christiaan\Documents\Phoenix\dist\phoenix\python27.dll
LOADER: Loaded functions from Python library.
LOADER: Manipulating environment (sys.path, sys.prefix)
LOADER: sys.prefix is C:\Users\CHRIST~1\DOCUME~1\Phoenix\dist\phoenix
LOADER: Setting runtime options
LOADER: Initializing python
LOADER: Overriding Python's sys.path
LOADER: Post-init sys.path is C:\Users\Christiaan\Documents\Phoenix\dist\phoenix
LOADER: Setting sys.argv
LOADER: setting sys._MEIPASS
LOADER: importing modules from CArchive
LOADER: extracted struct
LOADER: callfunction returned...
LOADER: extracted pyimod01_os_path
LOADER: callfunction returned...
LOADER: extracted pyimod02_archive
LOADER: callfunction returned...
LOADER: extracted pyimod03_importers
LOADER: callfunction returned...
LOADER: Installing PYZ archive with Python modules.
LOADER: PYZ archive: out00-PYZ.pyz
LOADER: Running pyiboot01_bootstrap.py
LOADER: Running pyi_rth_win32comgenpy.py
LOADER: Running pyi_rth__tkinter.py
LOADER: Running pyi_rth_pkgres.py
LOADER: Running pyi_rth_kivy.py
LOADER: Running pyi_rth_mplconfig.py
LOADER: Running pyi_rth_mpldata.py
LOADER: Running pyi_rth_gstreamer.py
LOADER: Running pyi_rth_qt4plugins.py
Qt: Untested Windows version 10.0 detected!
LOADER: Running PhoenixKv.py
Purge log fired. Analysing...
Purge 5 log files
Purge finished!
[INFO              ] [Logger      ] Record log in C:\Users\Christiaan\.kivy\logs\kivy_16-02-08_23.txt
[INFO              ] [Kivy        ] v1.9.1
[INFO              ] [Python      ] v2.7.6 |CUSTOM| (default, Sep 15 2014, 17:36:35) [MSC v.1500 64 bit (AMD64)]
[INFO              ] [Factory     ] 179 symbols loaded
[INFO              ] [Image       ] Providers: img_tex, img_dds, img_gif,   img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO              ] [OSC         ] using <thread> for socket
[INFO              ] [Window      ] Provider: sdl2
[INFO              ] [GL          ] GLEW initialization succeeded
[INFO              ] [GL          ] OpenGL version <4.5.13397 Compatibility   Profile Context 0>
[INFO              ] [GL          ] OpenGL vendor <ATI Technologies Inc.>
[INFO              ] [GL          ] OpenGL renderer <AMD Radeon HD 8870M>
[INFO              ] [GL          ] OpenGL parsed version: 4, 5
[INFO              ] [GL          ] Shading version <4.40>
[INFO              ] [GL          ] Texture max size <16384>
[INFO              ] [GL          ] Texture max units <32>
[INFO              ] [Window      ] auto add sdl2 input provider
[INFO              ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO              ] [Text        ] Provider: sdl2

Successfully added file types.

Successfully added file types.
platform:  Windows
[INFO              ] [Base        ] Start application main loop

我遇到了同样的问题,通过将 .kv 文件复制到 dist 文件夹解决了这个问题。

cp -R C:/Users/Ben/Documents/OpenCV_HummingbirdsMotion/MotionMeerkat/MotionMeerkat.kv dist/main/

这也可以通过将 .kv 作为数据对象添加到规范文件来实现。基本上空白屏幕说,我知道有一个 kivy 应用程序,但我没有小部件。

我知道这是一个旧的 post 但是,我想我会提供更多的见解。

如果您尝试使用 –-onefile 并只创建一个文件,那么简单地将 .kv 文件移动到目录对您来说可能不是一个好的选择。

我所做的是使用

将 .kv 文件内容嵌入 python 本身
from kivy.lang import Builder
Builder.load_string("""
    Your kivy content
""")

并将 main.py 移动到它自己的文件夹中,并在我 运行 命令

之前将其重命名为 main_em.py 之类的东西
python -m PyInstaller --onefile --windowed --name "myApp" "./main_em.py"

我将它移动到一个新文件夹的原因是,如果你尝试将 运行 程序作为一个 python 文件,它会堆叠两个相同的布局,所以基本上看起来你有复视.

并不是真的需要重命名,但我想保持我的代码库干净。

尽管我不是 100% 确定这一点,但我认为 PyInstaller 不知道如何处理 .kv 文件,所以这就是为什么你必须将它移动到文件夹中。但是,如果您将它嵌入到 python 中,那么它就在 python 代码中。

为了可维护性,将 .kv 文件嵌入到 python 代码中并不是一个好的做法,但在这种情况下,因为您正在打包它,所以这并不重要。

我处理工作流程的方式就是像您在其他情况下一样处理您的 kviy 项目,并且在您打包它的时候。您需要做的只是复制并粘贴到 main_em.py 和 运行 main_em.py 上的 PyInstaller。

这样您就可以遵循惯例和最佳实践,并且不必在打包后将 .kv 文件移动到目录中。两全其美。

我希望这对其他人有帮助,这是我第一次 post。

我正在查看一些文档,我认为您还可以执行以下操作:

Builder.load_file("./filename.kv")

这样你就不必按照我在其他 post.
中的建议进行操作 请记住,您 运行 来自 python,您必须注释掉 Builder.load_file 行。