创建 PyQt6 Python 项目可执行文件

问题描述

我在 Qt 中使用 python 3.8 编写了一个 PyQt6 项目。当我通过 python 运行 python 文件时,没问题。当我尝试将项目转换为可执行文件时,它失败了。我遇到了很多问题,我在谷歌中解决了这些问题。但是我找不到解决爱情失败的方法

此应用程序无法启动,因为没有 QT 平台插件可以 被初始化。重新安装应用程序可能会解决此问题

我使用 auto-py-to-exe 通过 belove 命令创建可执行文件

pyinstaller --noconfirm --onedir --windowed --icon "D:/WorkSpace/Projects/MouseReplayer/output/icon/icon2.ico" --name "Auto Test Repeater" --add-data "D:/WorkSpace/Projects/MouseReplayer/Screencopy;Screencopy/"
--add-data "D:/WorkSpace/Projects/MouseReplayer/ui;ui/" --paths "C:/Users/26010693/AppData/Local/Programs/Python/python38/Lib/site-packages/PyQt6/Qt/bin"
--hidden-import "PyQt6.sip"  "D:/WorkSpace/Projects/MouseReplayer/ui_main.py"

我尝试重新安装,但没有成功。实际上,这个问题在 PyQt5 中很常见,根据 Youtube 的说法,有一个简单的解决方案(Youtube Solution)将平台文件夹(PyQt5\Qt\plugins\platforms)复制到 Pyqt5-tools 文件夹中,都在 Python\python38\Lib\site-packages 中。但是,Pyqt6-tools 中没有 site-packages 文件夹,互联网上也没有安装指南。

我需要帮助解决它或找到另一种方法来创建与 PyQt6 兼容的可执行文件

解决方法

Python\Python38\Lib\site-packages\PyQt5\Qt\plugins\platforms 中的 dll 文件复制到直接可执行的输出文件夹中解决了该问题。我最近的 pyinstaller 命令:

pyinstaller --noconfirm --onedir --windowed --icon "D:/WorkSpace/Projects/MouseReplayer/output/icon2.ico" --name "Auto Test Player" --add-data "D:/WorkSpace/Projects/MouseReplayer/ScreenCopy;ScreenCopy/" --add-data "D:/WorkSpace/Projects/MouseReplayer/ui;ui/" --paths "C:/Users/26010693/AppData/Local/Programs/Python/Python38/Lib/site-packages/PyQt6/Qt/bin" --hidden-import "PyQt6.sip" --hidden-import "PyQt6.QtPrintSupport" --add-data "C:/Users/26010693/AppData/Local/Programs/Python/Python38/Lib/site-packages/PyQt6/Qt/plugins/platforms;platforms/"  "D:/WorkSpace/Projects/MouseReplayer/ui_main.py"

要解决的关键问题是:

--add-data "C:/Users/26010693/AppData/Local/Programs/Python/Python38/Lib/site-packages/PyQt6/Qt/plugins/platforms;platforms/" 

还有下面的一行是为了防止另一个问题:

--hidden-import "PyQt6.sip"

可能这个也很重要:

--hidden-import "PyQt6.QtPrintSupport"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...