Python Pyinstaller MSYS 问题与 PyQtWebKit
Posted
技术标签:
【中文标题】Python Pyinstaller MSYS 问题与 PyQtWebKit【英文标题】:Python Pyinstaller MSYS problem with PyQtWebKit 【发布时间】:2021-07-18 07:52:27 【问题描述】:web_browser.py
# -*- 编码:utf-8 -*- # 通过读取 ui 文件 'web_browser.ui' 生成表单实现 # # 创建者:PyQt5 UI 代码生成器 5.15.2 # # 警告:当 pyuic5 被安装时,对该文件所做的任何手动更改都将丢失 # 再次运行。除非您知道自己在做什么,否则不要编辑此文件。 从 PyQt5 导入 QtCore、QtGui、QtWidgets 类 Ui_MainWindow(对象): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(779, 257) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 如果 __name__ == "__main__": 导入系统 应用程序 = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(主窗口) MainWindow.show() sys.exit(app.exec_())
web_browser_main.py
从 web_browser 导入 * 从 PyQt5 导入 QtCore、QtGui、QtWidgets 从 PyQt5.QtCore 导入 QUrl 从 PyQt5.QtWebKitWidgets 导入 QWebView , QWebPage 导入系统 类测试浏览器代码: def __init__(self): self.app = QtWidgets.QApplication(sys.argv) self.mainWindow = QtWidgets.QMainWindow() self.main_ui = Ui_MainWindow() self.main_ui.setupUi(self.mainWindow) self.mainWindow.showMaximized() self.open_google() sys.exit(self.app.exec_()) def open_google(自我): self.google_url = 'http://www.google.com' self.main_ui.chat_browser = QWebView() self.main_ui.chat_page = QWebPage() self.main_ui.chat_browser.setPage(self.main_ui.chat_page) self.main_ui.chat_browser.setUrl(QUrl(self.google_url)) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) self.main_ui.chat_browser.setMinimumSize(QtCore.QSize(0, 398)) self.main_ui.chat_browser.setMaximumSize(QtCore.QSize(16777215, 398)) self.main_ui.chat_browser.setSizePolicy(sizePolicy) self.main_ui.chat_browser.setStyleSheet("背景色:白色;边框:1px 纯色#dadada;") self.main_ui.verticalLayout.addWidget(self.main_ui.chat_browser) self.main_ui.chat_browser.show() 程序 = TestBrowserCode()
-
从源代码运行:
Χρήστος@Chris-pc MINGW64 /c/python/scripts/Papinhio player/notes $ python web_browser_main.py
(网站显示正确)
-
制作 .exe 文件 (full result here)
Traceback(最近一次调用最后一次): 文件“C:/Python/Scripts/Papinhio player/notes/web_browser_main.py”,第 4 行,在 从 PyQt5.QtWebKitWidgets 导入 QWebView , QWebPage _find_and_load 中的文件“”,第 991 行 文件“”,第 975 行,在 _find_and_load_unlocked 文件“”,第 657 行,在 _load_unlocked 文件“”,第 556 行,在 module_from_spec 文件“”,第 1101 行,在 create_module _call_with_frames_removed 中的文件“”,第 219 行 _find_and_load 中的文件“”,第 991 行 文件“”,第 973 行,在 _find_and_load_unlocked ModuleNotFoundError:没有名为“PyQt5.QtWebKit”的模块 [17208] 无法执行脚本 web_browser_main
结果错误导入PyQt5.QtWebKitWidgets
msys2 mingw64 控制台中的所有内容。 如何编译以上文件?
【问题讨论】:
【参考方案1】:pyinstaller --onefile --hidden-import PyQt5.QtWebKit web_browser_main.py
上面的代码包括缺少的模块 QtWebKit。 我建议使用 --onedir 而不是 --OneFile 因为我认为输出的 exe 更稳定。 (在 web_browser_main 等应用程序中几秒钟后,我遇到了 Segmentfault 运行时错误)
现在工作!!!
【讨论】:
请解释一下代码的作用和它是怎么做的。 @M-Chen-3 做到了以上是关于Python Pyinstaller MSYS 问题与 PyQtWebKit的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pyinstaller 创建可独立运行的 QML 地图?
Pyinstaller onefile 可执行文件非常庞大和缓慢
如何在 MSYS2 中使用 Windows Python 安装