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 构建的 exe 文件时出错

与 cx_freeze 捆绑后,Flask 应用程序应请求挂起

用c语言编的程序生成exe文件为啥一打开马上就自动关闭了啊

如何修复由 cx_Freeze 转换为 exe 的 pygame 中的游戏?

cx_Freeze 生成的可执行文件无法打开

PyQt4 GUI 关闭后关闭打开的控制台