爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13706|回复: 9

[混合编程] PyQt打包方法与错误解决

[复制链接]
发表于 2020-4-27 15:21:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 15195775117 于 2020-6-8 14:09 编辑

最近一个月突击学习了python的GUI工具---PyQt,控件、布局、信号槽一马平川,不得不说,越是成熟的工具,学习起来越不费劲,越令人感到兴奋,操作Qt设计师有种以前学PS的感觉,直观而有趣。
今天,终于到了打包软件的时候了,略有些波折,但是在互联网中总是能找到答案(虽然不少都是错的)


-----------------PyQt打包方法-----------------


1、安装打包工具PyInstaller:在命令行键入pip install PyInstaller(我的命令行是从Anaconda中启动的)
2、在命令行中使py文件所在目录设为当前目录:cd C:\Users\Administrator\Desktop\UI\PyQt5-master\Chapter09\example
3、打包命令:pyinstaller -F -w colorDialog.py
4、报错:
1.jpg

5、参考网络帖子:https://blog.csdn.net/m0_37534550/article/details/86481785

解决方法如下:我有3个py环境:
2.jpg

对应以下3个文件夹:
3.jpg

我的pyqt版本是5.9.2,python是3.7,于是我选择第3个文件夹,从其...Library\plugins\PyQt5目录下找到插件:pyqt5qmlplugin.dll
把报错找不到插件的目录新建,
把以上dll文件复制进去。
6、再次按之前的命令打包,py所在目录下的dist文件夹中出现colorDialog.exe
7、但是启动会报错:
4.jpg

8、解决办法:将C:\ProgramData\Anaconda3\Library\plugins目录下的platforms文件夹整个复制到dist文件夹内,这时exe就能正常启动了!
5.jpg



密码修改失败请联系微信:mofangbao
 楼主| 发表于 2020-4-27 15:32:26 | 显示全部楼层
本帖最后由 15195775117 于 2020-4-27 22:06 编辑

PyInstaller将“python解释器”和脚本打包成一个可执行文件,不是编译成机器码,不但不会提高执行效率,还会降低。
PyInstaller会将该脚本的依赖和python解释器收集起来并加密处理。
在不同系统上打包的可执行文件,就只能在该类型系统上运行,即Linux系统上打包的在Linux上运行。
python的打包工具有多种,比如还有py2exe
P.S.在C盘下新建目录存放插件dll,只为打包之用
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 14:55:24 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-12 15:26 编辑

在打包完成后,启动时报错:

......could not find or load the Qt platform plugin "windows"

经试验,以下方法可行:
(1)在系统变量中新建变量:QT_QPA_PLATFORM_PLUGIN_PATH
(2)变量值为插件路径:C:\ProgramData\Anaconda3\Library\plugins
360截图20200608143504409.jpg

解决方法来源:https://blog.csdn.net/a359680405/article/details/45077187?_t=t

这个解决办法我也不知道是否接触本质,权当权宜之计,值得商榷。

软件在新电脑运行时不需要这个设置

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 15:05:25 | 显示全部楼层
打包时缺文件

打包的时候,命令行经常提示在某某路径下缺什么文件,这时候就从Anaconda文件夹下找,复制到提示的路径中,如果找不到就从网上down。命令行总是在“C:\qt64\qt_1544645195969\_h_env\Library”中找文件,我就新建了这个路径给它找
360截图20200608150040386.jpg

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 11:41:09 | 显示全部楼层
可能缺失的文件

我在打包时遇到报错缺文件:

libeay32.dll,ssleay32.dll,icuin58.dll,icuuc58.dll,libpng16.dll,zlib.dll

这些文件可以从网上下载,我已经放在了附件



3.jpg

4.jpg

2.jpg

1.jpg


还有个MSVCR71.dll:
13449 WARNING: lib not found: MSVCR71.dll dependency of
C:\qt64\qt_1544645195969\_h_env\Library\bin\libeay32.dll
13839 WARNING: lib not found: MSVCR71.dll dependency of
C:\qt64\qt_1544645195969\_h_env\Library\bin\ssleay32.dll
我把C:\Windows\SysWOW64下的MSVCR71.dll复制到了C:\Windows\System32下


icuin58.dll

1.74 MB, 下载次数: 0, 下载积分: 金钱 -5

icuuc58.dll

1.42 MB, 下载次数: 0, 下载积分: 金钱 -5

libeay32.dll

992 KB, 下载次数: 0, 下载积分: 金钱 -5

libpng16.dll

201.5 KB, 下载次数: 0, 下载积分: 金钱 -5

ssleay32.dll

355.5 KB, 下载次数: 0, 下载积分: 金钱 -5

zlib.dll

85.41 KB, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 11:44:06 | 显示全部楼层
资源文件重复

可能有重复的文件,我各删了一个,也不是太明白这样对不对:
17438 WARNING: One binary added with two internal names.
17438 WARNING: ('icudt58.dll',
'C:\\qt64\\qt_1544645195969\\_h_env\\Library\\bin\\icudt58.dll',
'BINARY')
17440 WARNING: was placed previously at
17441 WARNING: ('PyQt5\\Qt\\bin\\icudt58.dll',
'C:\\qt64\\qt_1544645195969\\_h_env\\Library\\bin\\icudt58.dll',
'BINARY')
17628 WARNING: One binary added with two internal names.
17628 WARNING: ('icuuc58.dll',
'C:\\qt64\\qt_1544645195969\\_h_env\\Library\\bin\\icuuc58.dll',
'BINARY')
17631 WARNING: was placed previously at
17632 WARNING: ('PyQt5\\Qt\\bin\\icuuc58.dll',
'C:\\qt64\\qt_1544645195969\\_h_env\\Library\\bin\\icuuc58.dll',
'BINARY')

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 14:05:37 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-12 23:45 编辑

一些技巧
打包的过程中也熟练的一些命令,掌握了一些技巧

升级pip(管理员模式打开):python -m pip install --upgrade pip
更新包: pip install --upgrade PyInstaller
卸载包:pip uninstall wxPython
查看安装了那些包:pip freeze

pyinstaller -F - w test.py
上面的打包代码中:
-F 是打包成一个独立的exe
-w 是不用控制台
打包时不使用-w,留着命令行可以看到更多报错,很有用

报错信息写在warn-platform.txt
16136 INFO: Warnings written to
C:\Users\Administrator\Desktop\victory\build\platform\warn-platform.txt

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 14:57:30 | 显示全部楼层
终极杀招---王八拳打包法

本周的前4天,我都是在pyQt软件反复运行失败中惆怅度过的,


经过4天的bug积累,终于柳暗花明又一村,在昨晚成功独立运行。


昨晚生成的“零号机”,可以在win10和win7系统、没有anaconda、python的环境下运行。


我打包使用的命令是pyinstaller -F platform.py,这样启动软件时会先弹出命令行窗口,如果有bug会直接提示。


软件路径中,__pycache__文件夹、build文件夹和platform.spec不动,需要调整的是dist文件夹


原始生成的dist文件夹内只有platform.exe,运行时生成个debug.log,但是启动时显示缺少WebEngineProcess.exe等很多很多文件。
我就使用王八拳配置法”---把缺的文件一股脑往dist文件夹里塞:
提示缺的资源文件从anaconda路径和系统C盘中找,然后一股脑粘过去,没有的文件就从网上down。


至此,我稀里糊涂配置好了dist,里面的文件是从哪来的已经理不清了,
不过,我也等于做好一个“dist酵头”:
以后打包其他软件,就把dist的文件(除启动程序exe)往新软件的dist粘贴,注意重复的不要覆盖即可。
经试验,这种做法是可行的。


原始生成的软件有180M,经我配置的文件有1.3G,
虽然很臃肿,但毕竟可以跑起来了,以后再瘦身吧。
软件的启动也有些慢,第一次要半分钟才起来,第二次快点,约10秒,不知道是不是臃肿的原因。


P.S.软件在新电脑上运行,需要改qt.conf
该文件可以用记事本打开,里面写着的好像是配置资源的绝对路径。
软件粘贴进新电脑里后,要根据实际位置进行修改。
qt.conf内容示例如下:
[Paths]
Prefix = H:/victory/dist/PyQt5/Library
Binaries = H:/victory/dist/PyQt5/Library/bin
Libraries = H:/victory/dist/PyQt5/Library/lib
Headers = H:/victory/dist/PyQt5/Library/include/qt
TargetSpec = win32-msvc
HostSpec = win32-msvc

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2020-7-16 11:32:35 | 显示全部楼层
厉害,python生成 exe文件确实不方便。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 11:37:43 | 显示全部楼层
十月 发表于 2020-7-16 11:32
厉害,python生成 exe文件确实不方便。

多摸索吧,也没有捷径
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表