使用 --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 中添加数据文件