python - PyInstaller 生成 exe 文件错误:qt.qpa.plugin: could not load the qt platform plugin "windows" in "" 即使找到
问题描述
我创建了一个程序来从驱动器上的文件中读取某些数据,在 PyQt5 ui 上显示结果并接受用户的更正(如果有)。
当作为 python 文件运行时,该程序运行良好。但是,当我使用 PyInstaller 将其转换为独立的 exe 时,它可以正常工作,直到需要启动 pyqt5 gui。此时,它停止抛出以下错误:
qt.qpa.plugin:即使找到了,也无法在“”中加载 Qt 平台插件“windows”。此应用程序无法启动,因为无法初始化 Qt 平台插件。重新安装应用程序可能会解决此问题。可用的平台插件有:minimal、offscreen、windows。
gui的代码非常大,但结构如下:
from PyQt5 import uic, QtWidgets
import sys
import os
#baseUIClass, baseUIWidget = uic.loadUiType('gui.ui')
baseUIClass, baseUIWidget = uic.loadUiType(r'C:\mypath\gui.ui')
class Ui(baseUIClass, baseUIWidget ):
def __init__(self, *args, **kwargs):
baseUIWidget.__init__(self, *args, **kwargs)
self.setupUi(self)
# More code to perform the desired actions
def run(input_variables):
app = QtWidgets.QApplication(sys.argv)
ui = Ui()
ui.show()
# More code to make the Ui perform desired actions
app.exec_()
return(output_variables)
该代码已转换为具有以下参数的独立 exe:
pyinstaller --hiddenimport <hidden import> --onefile <python filename>
请问您知道如何解决这个问题吗?
谢谢
解决方案
我在编译的应用程序中遇到了相同的错误消息。
为了追查这个问题,我首先用最少的导入将应用程序剥离到它的骨架,它在编译时可以完美地工作。然后我部分添加了我的“大”应用程序的所有导入,直到错误再次出现。
最后(至少对我而言)熊猫是罪魁祸首:
最小可重复的例子,这有效:
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QMainWindow()
window.show()
app.exec()
这(在第 2 行添加了 pandas 导入)引发了您描述的错误:
from PyQt5 import QtWidgets
import pandas as pd # import after pyqt5
app = QtWidgets.QApplication([])
window = QtWidgets.QMainWindow()
window.show()
app.exec()
但是,当首先导入 pandas 然后导入 PyQt 5 时,我的编译版本再次工作:
import pandas as pd # import before pyqt5
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QMainWindow()
window.show()
app.exec()
所以,在我的情况下,解决方案是追踪“错误的导入”,摆弄进口订单并获得幸运(我太缺乏经验,甚至无法理解为什么进口订单会导致这个错误)
如果您不使用 pandas,也许整个“剥离到骨架并开始逐个导入” - 方法将帮助您进一步阐明错误的根本原因。
如果您使用的是 pandas 并且顺序切换没有帮助,那么还有另一个线程描述了尝试处理 pandas 编译问题的方法。
推荐阅读
- css - 如何让 SVG 动画在跨浏览器中工作
- unit-testing - 如果定义了“test-ns-hook”,“lein test :only foo.bar.test/testme”没有使用“testme”功能?
- xslt - 获取节点级别
- magento2 - 为什么将 Magento2 样本数据中的 Luma Thema 样本图像扩展到自定义主题时不可见?
- c++ - 调用复制构造函数的两种方式有什么区别?
- java - Selenium WebDriver:如何在 testNG 中为失败的测试用例执行完整的测试
- android - VS 2017 - Xamarin 不能仅在我的手机上调试应用程序
- laravel - 使用发布数据重定向到外部网站会导致 ErrorException (Laravel)
- spring - @Rollback 不适用于 TestNG 的 @BeforeClass
- javascript - 根据鼠标位置旋转 SVG 渐变