当前位置: 移动技术网 > 科技>操作系统>windows > Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案

Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案

2019年07月30日  | 移动技术网科技  | 我要评论

纵横之快意人生,曼谷复仇,希腊神话-选威尼斯人注册送56元

最近用pyqt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常。 但是目标电脑是32位的,所以需要打包32位exe,然后问题就出现了。

打包32位exe, 虽然网上有教程说使用 anaconda 生成python 的32位环境,我试了,但是没有成功,转而选择卸载64位python,不如直接装32位的python, 依旧使用pyinstaller 打包

打包时虽然有几个警告但貌似还顺利,点开exe后报 "failed to execute script xxx",更换了多个python 版本,装了卸卸了装,翻了很多资料都没有解决,于是打算自力更生

众所周知,可以用这条命令打包不带控制台的exe:

pyinstaller -w -f  xxx.py 

但这样就没办法看到报错了,因此保留控制台:

pyinstaller -f  xxx.py 

打包后,程序一闪而过,用手机开视频录下来(60fps), 画质很渣但是依然无法看漏“unable to find qtcore.dll on path”:

问题应该就是丢失pyqt库了,少了就补上吧~ 直接将这个dll拷贝到 c:\windows\system32下,然后开开心心的点开exe,问题就解决了~.....才没有解决......

需要把python的pyqt5库路径添加到环境变量path中才行,这回就真的能跑起来了,很开心(实际上到这一步折腾了很久),不过估计要在目标电脑装好pyqt5,然后添加环境变量,虽然有点麻烦但是能用。

事情就这么告一段落了....

 

才没有告一段落,我并不甘心,凭什么64位跑得好好的,32位就丢dll,凭什么命令行运行正常,exe就丢东西?而且我到exe的临时目录看了,实际上qt5core.dll等库都好好的躺在里面的,但是为什么就有说找不到,然后尝试了

1. 把qt5core.dll强行再打包在exe中,这个可以编辑spec文件实现,改datas那行,不行!

2. 尝试在运行时调整运行路径,或者添加临时路径,让程序可以识别原本就在同一层目录下的dll们,没有找到类似的教程(这样的需求本来就很奇怪吧?)

3. 换了另一台试了下,建了个虚拟机试了下,以排除系统区别,不行

4. 换了低版本的python 试了下,不行

5. 尝试更换打包软件,好像大多都是pyinstaller,还有py_win32,cx_freeze等,py_win32貌似需要重新写界面,cx_freeze按例程跑了下一点效果都没有。

费了很长时间,可以说很心累了,有幸看到了一篇博文:

pyinstaller打包pyqt5的若干坑....

标题可以看出很接近了,其实降低了pyqt5的版本就可以了,似乎不需要像这篇博文里面降低pyinstaller的版本(3.5),打包后不用添加环境变量也可以正常运行了,exe体积还降低了一半...

一开始我用的pyqt5.13.0打包32位报错,降低到5.9.2就没问题了,顺便记一下pip安装指定版本的库:

pip install pyqt5==5.9.2

我喜欢把各种依赖的库写在一个cmd文件中,需要安装环境时双击一下就完事了

 

总结一下就是:

pyinstaller打包pyqt5程序时,若提示丢失dll文件,可尝试降低pyqt5的版本,如pyinstaller3.5 + pyqt5.9.2组合 (@windows 7 x64 sp1 + python 3.7.4 x32)

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网