cx_Freeze Exe 应用程序一打开就关闭
Posted
技术标签:
【中文标题】cx_Freeze Exe 应用程序一打开就关闭【英文标题】:cx_Freeze Exe Application closes as soon as opens 【发布时间】:2017-05-14 01:13:55 【问题描述】:我正在尝试使用 cx_Freeze 将我的 pygame python 项目转换为 .exe 文件。安装文件执行正确且没有错误,但问题是当我运行我的 .exe 文件时,控制台窗口将打开和关闭,并且我的游戏窗口不会出现。
我正在使用的 setup.py:
import os
os.environ['TCL_LIBRARY'] = "C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python35-32\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python35-32\\tcl\\tk8.6"
import cx_Freeze
executables = [cx_Freeze.Executable("main.py")]
cx_Freeze.setup(
name="Shooty",
options="build_exe": "packages": ["pygame"], "include_files": ["character.png"],
description="Shooty, An epic platformer!",
executables=executables
)
我遇到了 TCL 错误,所以我添加了前三行。然后,一切都应该是正确的。我已经看过类似的帖子,但似乎没有任何帮助。 cx_freeze app opens then closes quickly python program works but .exe does not open cx_Freeze Executable generated with cx_freeze opens for an instant before closing
澄清/TLDR: 我正在使用 cx_Freeze 将 pygame 游戏转换为 .exe 格式。我只有一张名为 character.png 的图像。构建完美执行,没有错误(只要我包含前三行,我有)唯一的问题是:运行 exe 时,控制台打开但不是我的游戏窗口,控制台立即关闭。
【问题讨论】:
有人有解决办法吗? 尝试从命令行运行可执行文件。这样控制台不会立即关闭,因此如果有任何错误消息,您将能够阅读它们 好的,就这么做了。控制台没有输出。 您是从 TTF 文件加载字体吗?您也可以尝试将import pygame._view
添加到您的源代码中,如here 所述。我有点怀疑这些中的任何一个都会有所帮助,因为你根本没有得到任何输出,但值得一试。
不,反正我跟着帖子也没用
【参考方案1】:
我复制了您的设置脚本并使用我自己的一个 Pygame 项目对其进行了测试。一开始对我也不起作用,所以我调查了这个问题并在 Bitbucket 上发现了一个错误:https://bitbucket.org/anthony_tuininga/cx_freeze/issues/211/if-name-main-doesnt-work-in
显然有一个错误,特别是在 cx-Freeze 5.0 版中,if __name__ == "__main__":
行将不起作用。但是当我按照错误报告中的建议将其替换为 if __name__.endswith('__main__'):
时,我的 Pygame 应用程序与 cx-Freeze 一起工作,所以这解决了我的问题。
另外,我建议将关键字参数base="Win32Gui"
添加到cx_Freeze.Executable
,这样控制台窗口就不会出现在 Pygame 窗口后面,除非你想要它。此外,Tkinter 对于 Pygame 应用程序来说是完全不需要的,因此您可以将 "excludes": ["Tkinter"]
(或 Python 3 中的小写 tkinter
)添加到 options dict 并去掉脚本的前三行。
【讨论】:
我注意到,在任务管理器中使用 Win32Gui 选项(没有它我没有测试过),即使在关闭 Pygame 窗口后,EXE 也会保持运行。可能需要添加 sys.exit() 调用来解决此问题。 编辑:没关系,我用你的解决方案让它工作了一点。谢谢!这比它的价值更麻烦, 这个问题显然已经解决了(我有同样的错误,但我没有解决方法):bitbucket.org/anthony_tuininga/cx_freeze/commits/…以上是关于cx_Freeze Exe 应用程序一打开就关闭的主要内容,如果未能解决你的问题,请参考以下文章
与 cx_freeze 捆绑后,Flask 应用程序应请求挂起