使用 cx_freeze 创建的 .app 在启动时立即关闭

Posted

技术标签:

【中文标题】使用 cx_freeze 创建的 .app 在启动时立即关闭【英文标题】:.app created with cx_freeze instantly closing on launch 【发布时间】:2017-01-22 09:56:33 【问题描述】:

我正在 python 中制作一个非常简单的应用程序,使用 Tkinter 作为 GUI,并使用 cx_freeze 来构建它。 这一切都在一个简单的“sleep.py”文件中。

cx_freeze使用的setup.py文件如下:

from cx_Freeze import setup, Executable

executables = [
    Executable('sleep.py', base=None)
]

setup(name='Sleep Calculator',
      version='0.90',
      description='Sample cx_Freeze script',
      executables=executables
      )

sleep.py 文件正在正确启动: - 从终端在 MacOS 中启动时 - 在 MacOS 中使用 python3 setup.py build 构建时 - 在 Windows 中使用 python3 setup.py build_exe 构建,然后手动将 tkinter 文件复制到 cx_freeze 创建的构建文件夹中

所以我有一个可以在 Windows 和 Mac 上运行的 sleep.py 文件,一个在 MacOS 上运行的脚本,以及一个在 Windows 上运行的 EXE。

但是,当尝试使用 python3 setup.py bdist_mac 构建到 .app 时,我得到的应用在启动时会立即关闭。

在启动过程中,我在控制台中收到的唯一消息是 “从用户 CFPrefsD 加载首选项以进行搜索列表”

在构建期间,我得到了多个 fatal error: /Library/Developer/CommandLineTools/usr/bin/otool: internal objdump command failed错误。 Xcode 没有安装,但是 CommandLineTools 安装了。

目前我对 OS X 几乎一无所知,因此欢迎任何帮助, 谢谢!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,带有 cx_freeze 的应用程序一打开它就会关闭,但在包中运行可执行文件会起作用。

通过打开构建的包并编辑 info.plist 文件为我解决了这个问题。

添加捆绑标识符后,它会按原样启动。

<key>CFBundleIdentifier</key>
<string>My App</string>

【讨论】:

以上是关于使用 cx_freeze 创建的 .app 在启动时立即关闭的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 3.2 和 cx_Freeze 创建 Windows 可执行文件

使用 cx_freeze 冻结后的绝对路径(Qt5 / PySide2 App)

cx_freeze - 可执行文件仍在本地目录中查找

cx_Freeze 应用程序找不到 tk.tcl

在 Mac 上使用 cx_Freeze 从 .py 创建 .exe

即使使用 Win32GUI,cx_Freeze 也会闪烁 cmd 窗口