Python pyinstaller exe空白屏幕

Python pyinstaller exe空白屏幕,python,python-2.7,kivy,pyinstaller,Python,Python 2.7,Kivy,Pyinstaller,我使用PyInstaller在Windows10上构建了一个.exe。当我运行可执行文件时,会打开一个窗口,但它不显示任何小部件,只显示一个空白屏幕。据我所知,输出没有显示任何错误。在Kivy 1.9.1中使用Python2.7(Enthout Canopy)。当我运行原始源文件时,一切都很好;只有.exe失败 我的.spec文件如下所示: # -*- mode: python -*- from kivy.deps import sdl2, glew, gstreamer block_ciph

我使用PyInstaller在Windows10上构建了一个.exe。当我运行可执行文件时,会打开一个窗口,但它不显示任何小部件,只显示一个空白屏幕。据我所知,输出没有显示任何错误。在Kivy 1.9.1中使用Python2.7(Enthout Canopy)。当我运行原始源文件时,一切都很好;只有.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')
运行时的输出是:

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
PyInstaller引导加载程序3.x
加载程序:可执行文件是C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix\Phoenix.exe
加载程序:homepath是C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix
加载程序:\ u MEIPASS2为空
加载程序:archivename为C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix\Phoenix.exe
加载器:无需解压缩文件即可运行;将extractionpath设置为homepath
加载器:SetDllDirectory(C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix)
加载器:已经在运行子用户的代码中。
加载程序:Python库:C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix\python27.dll
LOADER:从Python库加载函数。
加载器:操作环境(sys.path,sys.prefix)
加载器:sys.prefix是C:\Users\CHRIST~1\DOCUME~1\Phoenix\dist\Phoenix
加载器:设置运行时选项
加载程序:初始化python
加载器:重写Python的sys.path
加载器:Post init sys.path是C:\Users\Christiaan\Documents\Phoenix\dist\Phoenix
加载器:设置sys.argv
加载器:设置系统
加载程序:从CArchive导入模块
加载器:提取结构
加载器:调用函数返回。。。
加载程序:提取的pyimod01\u os\u路径
加载器:调用函数返回。。。
加载程序:已提取pyimod02_存档
加载器:调用函数返回。。。
加载程序:提取的pyimod03\u导入程序
加载器:调用函数返回。。。
加载器:使用Python模块安装PYZ存档。
加载程序:PYZ存档:out00-PYZ.PYZ
加载程序:运行pyiboot01_bootstrap.py
加载程序:运行pyi_rth_win32comgenpy.py
加载程序:正在运行pyi_rth_utkinter.py
加载程序:运行pyi_rth_pkgres.py
加载程序:运行pyi_rth_kivy.py
加载程序:运行pyi\u rth\u mplconfig.py
加载程序:运行pyi\u rth\u mpldata.py
加载程序:运行pyi\u rth\u gstreamer.py
加载程序:运行pyi_rth_qt4plugins.py
Qt:检测到未测试的Windows 10.0版!
装载机:运行PhoenixKv.py
清除日志已激发。分析。。。
清除5个日志文件
清洗完毕!
[INFO][Logger]在C:\Users\Christiaan\.kivy\logs\kivy_16-02-08_23.txt中记录日志
[INFO][Kivy]v1.9.1
[INFO][Python]v2.7.6 |自定义|(默认值,2014年9月15日,17:36:35)[MSC v.1500 64位(AMD64)]
[信息][工厂]加载了179个符号
[信息][图像]提供商:img_-tex、img_-dds、img_-gif、img_-sdl2、img_-pil(img_-ffpyplayer忽略)
[信息][OSC]用于插座
[信息][窗口]提供程序:sdl2
[INFO][GL]GLEW初始化成功
[信息][GL]OpenGL版本
[信息][GL]OpenGL供应商
[INFO][GL]OpenGL渲染器
[信息][GL]OpenGL解析版本:4,5
[信息][GL]明暗处理版本
[信息][GL]纹理最大大小
[信息][GL]纹理最大单位
[信息][窗口]自动添加sdl2输入提供程序
[信息][窗口]不允许使用虚拟键盘,单模,未对接
[信息][文本]提供商:sdl2
已成功添加文件类型。
已成功添加文件类型。
平台:Windows
[INFO][Base]启动应用程序主循环

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

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

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

< P>我知道这是一个老帖子,但我想我会给出更多的见解。< /P> 如果您试图使用–-onefile并只创建一个文件,那么简单地将.kv文件移动到目录中对您来说并不是一个好的选择

我所做的是使用

来自kivy.lang导入生成器
生成器。加载\u字符串(“”)
你的kivy内容
""")
并将
main.py
移动到其自己的文件夹中,并在运行命令之前将其重命名为类似
main_em.py
的其他名称

python -m PyInstaller --onefile --windowed --name "myApp" "./main_em.py"
我之所以将其移动到一个新文件夹中,是因为如果您尝试将该程序作为一个python文件运行,它将堆叠两个相同的布局,所以基本上看起来您有双重视野

实际上并不需要重命名,但我希望保持代码库的干净

虽然,我不是100%确定,但我认为PyInstaller不知道如何处理.kv文件,因此您只需将其移动到文件夹中。但是,如果您将其嵌入到python中,那么它就在python代码中

在python代码中嵌入.kv文件以提高可维护性并不是一个好的做法,但在本例中,由于您正在打包它,所以这并不重要

我处理工作流程的方式就是像其他方式一样处理kviy项目,当需要打包时。您只需复制并粘贴到main_em.py中,然后在main_em.py上运行PyInstaller即可

这样,您就可以遵守约定和最佳实践,也不必在打包后将.kv文件移动到目录中。两全其美


我希望这对其他人有所帮助,这是我的第一篇帖子。

我正在查看一些文档,我想您也可以做以下工作:

Builder.load_file("./filename.kv")
这样你就不必按照我在另一篇文章中的建议去做了。

请记住,如果您是从python运行它,则必须注释掉Builder.load\u文件行。

谢谢!这正是问题所在。