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的主要内容,如果未能解决你的问题,请参考以下文章