Pyinstaller --onefile 模式,如何在解包前向控制台写入消息

Posted

技术标签:

【中文标题】Pyinstaller --onefile 模式,如何在解包前向控制台写入消息【英文标题】:Pyinstaller --onefile mode, how to write a message to console before unpacking 【发布时间】:2019-09-22 09:13:45 【问题描述】:

我有一个 .exe,我正在使用 pyinstaller 打包它,它就像一个魅力。但是,当单击 .exe 时,我必须等待近 10 秒,同时盯着空白的控制台窗口才能启动实际的应用程序。

根据我的研究,我推测这是因为 --onefile,并且在运行任何代码之前都需要解压缩打包的所有各种文件。我不担心 10 秒的等待时间,但新用户通常需要支持,因为他们认为程序无法正常工作(有理由这样)。

我的问题非常简单,但我想不出办法:有没有办法让 pyinstaller 在解包之前运行一个小脚本,以便将状态信息发布到控制台,所以用户知道它有效吗?

【问题讨论】:

应该相当简单地修改 pyinstaller 的源代码到那个效果? 您找到解决方案了吗? 也许在引导加载程序中添加一些 printf() 行? 【参考方案1】:

据我所知,目前无法在解包之前显示自定义消息以让用户知道应用程序正在运行。 Source

有一些变通方法可以让用户知道程序正在运行。

显示控制台窗口

启动应用程序后显示控制台窗口将输出 PyInstaller Bootloader 正在打开时的状态。

要显示控制台,请在捆绑您的应用程序时使用 --console 标志(或编辑 .spec 文件以包含 console = True

启用调试模式

要启用调试模式,请使用 --debug 标志(或编辑 .spec 文件以包含 debug = True

示例

exe = EXE(pyz,
          //...
          debug=True,
          console=True )

【讨论】:

【参考方案2】:

您总是可以将您的程序包装到 7zip 安装程序中。您可以在运行主程序之前添加一个快速的 shell 脚本来说“正在加载...”,或者您可以编辑 config.txt 来执行相同的操作。

How do I make a self extract and running installer

【讨论】:

以上是关于Pyinstaller --onefile 模式,如何在解包前向控制台写入消息的主要内容,如果未能解决你的问题,请参考以下文章

pyinstaller --onefile 生成0KB exe

使用 onefile 选项在 Pyinstaller 中添加数据文件

使用 PyInstaller 在 --onefile 中使用 QML 构建 PyQt5

在使用 PyInstaller --onefile 打包 kivy 时包含 .kv/.json 文件?

有没有办法创建从 pyinstaller --onefile 生成的单个可执行 exe 文件的 MSI 包?

如何将 PortAudio 包含到 pyinstaller onefile 构建中