我尝试使用pyinstaller
从Python应用程序创建Windows的单文件可执行文件。
我从here下载了pyinstaller
的实验性Python 3分支(向下滚动,您将找到下载链接,文件为py3.zip)。我使用python setup.py install
安装了它。
更新:我也尝试使用Python 2版本,并遇到了同样的问题。
然后我创建了一个名为test.py
的测试python脚本,其中包含以下内容:
print('Hello, World!')
之后,我运行以下命令来创建单文件可执行文件:
pyinstaller --onefile test.py
命令成功,我确认已生成文件dist/test.exe
。但是,当我尝试运行它时,我得到的只是一个空的控制台窗口。什么都没有出现,程序永远不会终止。它永远挂在那里,直到我强行关闭它。
调用pyinstaller test.py
(没有--onefile
选项)可以正常工作。那么 问题是什么?
请注意,使用py2exe
或cx_freeze
不是一种选择。它必须是pyinstaller
。
更新:我刚刚在Python 2下测试了它(使用正常的PyInstaller版本),我遇到了同样的问题。所以,这不仅仅是Python 3的问题。
答案 0 :(得分:16)
我设法解决了这个问题。
我发现程序确实运行了。但是,在显示Hello, World!
消息之前,它已经挂了很长时间(就像5分钟!)。
实际上,问题是由UPX(针对可扩展的Ultimate Packer)引起的,该工具旨在减少可执行文件的大小。如果在系统中找到它,PyInstaller默认使用UPX。由于我仍然无法掌握的原因,UPX打包的可执行文件需要很长时间才能自行提取和运行。
因此,只需运行带--noupx
选项的命令即可解决问题。
pyinstaller --debug --onefile --noupx test.py
有关详细信息,请查看GitHub issue。