设为首页 加入收藏

TOP

Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案
2019-09-17 14:55:58 】 浏览:70
Tags:Pyinstaller 打包 exe 报错 " failed execute script XXX" 解决方案

最近用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)

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇你真的会使用 VMware Workstation.. 下一篇1.SpringBoot整合Mybatis(CRUD的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目