使用 --onefile 和 --noconsole 使用 PyInstaller 编译的 PyQt5 应用程序,但 exe 无法启动

Posted

技术标签:

【中文标题】使用 --onefile 和 --noconsole 使用 PyInstaller 编译的 PyQt5 应用程序,但 exe 无法启动【英文标题】:PyQt5 app compiled with PyInstaller using --onefile and --noconsole, but exe fails to launch 【发布时间】:2021-05-06 13:18:54 【问题描述】:

使用 Qt Designer 和 PyQt5,我制作了一个简单的应用程序,它对 .txt 文件进行一些简单的修改并保存它。我使用 PyInstaller 使用以下命令成功编译了我的程序:

pyinstaller --distpath DESTINATION_PATH --onefile --noconsole myscript.py

可执行文件已创建,但当我尝试运行它时,我收到一条错误消息,提示 应用程序无法启动,因为它的并排配置不正确。 如果我不使用 --noconsole,可执行文件运行良好,但这不是我打算运行它的方式。 我对 PyQt5 和 PyInstaller 相当陌生,我在某处读到我的程序在使用 --noconsole 时不应包含“子进程”,但我不完全确定这意味着什么。 如果有任何相关性,我的防病毒软件在使用--onefile --noconsole 编译时会删除.exe,但在仅使用--onefile 时不会。不过,这个问题很快就通过创建异常解决了。

这是我使用的导入:

import sys, re, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QApplication, QMessageBox
from pathlib import Path
import pyperclip as pc

【问题讨论】:

尝试将pyperclip作为隐藏导入添加到规范文件:hiddenimports=['pyperclip'] 好的,我会在周日之前尝试这样做。我目前处于关闭状态,无法访问我的台式电脑。你能告诉我以后是否需要用程序复制规范文件吗?还是只需要在我的电脑上? 【参考方案1】:

ThePyGuy 上面提供的答案已经解决了这个问题。在 spec 文件中添加 hiddenimports=['pyperclip'] 足以防止错误发生,并且程序运行良好到我测试的程度。

【讨论】:

以上是关于使用 --onefile 和 --noconsole 使用 PyInstaller 编译的 PyQt5 应用程序,但 exe 无法启动的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyinstaller [eel] 编译应用程序时出错

使用 PyInstaller (--onefile) 捆绑数据文件

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

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

重磅:稳定币发行平台宣布为Filecoin推出稳定币oneFIL,利于存储支付和结算

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