PyInstaller:单文件可执行文件不 运行

PyInstaller: Single-file executable doesn't run

我正在尝试使用 pyinstaller.

从 Python 应用程序为 Windows 创建一个单文件可执行文件

我从 here (the file was python3.zip 下载了 Python 3 b运行ch 的 pyinstaller,但是 link 现在已经死了)。我使用 python setup.py install.

安装了它

然后我创建了一个名为test.py的测试python脚本,内容如下:

print('Hello, World!')

之后,我运行下面的命令来创建一个单文件可执行文件:

pyinstaller --onefile test.py

命令成功,我确认文件dist/test.exe已经生成。但是,当我尝试 运行 它时,我得到的只是一个空的控制台 window。什么都没有出现,程序永远不会终止。它永远挂在那里,直到我强行关闭它。

调用 pyinstaller test.py(没有 --onefile 选项)工作正常。那么是什么问题呢?

请注意,使用 py2execx_freeze 不是一个选项。必须是 pyinstaller.

更新: 我刚刚在 Python 2(使用普通的 PyInstaller 版本)下测试了它,我 运行 遇到了同样的问题。所以,这不仅仅是一个 Python 3 问题。

我设法解决了这个问题。

我发现该程序确实 运行。但是,它在显示 Hello, World! 消息之前挂了很长时间(比如 5 分钟!)。

问题是由 UPX (Ultimate Packer for eXectutables) 引起的,该工具旨在减小可执行文件的大小。如果 PyInstaller 在系统上找到它,默认情况下使用 UPX。由于我仍然无法理解的原因,UPX 打包的可执行文件自解压花费了极长的时间并且 运行.

因此,只需 运行 将命令与 --noupx 选项结合使用即可解决问题。

pyinstaller --onefile --noupx test.py

作为旁注,将 --debug 选项添加到 pyinstaller 命令通常可以帮助识别此类问题。