Pyinstaller 打包exe 报错 "failed to 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按例程跑了下一点效果都没有。
费了很长时间,可以说很心累了,有幸看到了一篇博文:
标题可以看出很接近了,其实降低了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)
Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案的更多相关文章
- 【Python】pyinstaller打包运行报错failed to execute script main
前言 最近用pyinstaller打包的时候一直报"failed to execute script main". 最终使用"pyinstaller --hidden-i ...
- xhprof查看性能测试图一直报错:failed to execute cmd: " dot -Tpng"多种因素解决方案
xhprof查看性能测试图一直报错:failed to execute cmd: ” dot -Tpng”多种因素解决方案最近在新环境进行php代码性能测试,用了xhprof这个工具,搭建好以后,点击 ...
- 【解决】MacOS下 Python3.7 使用 pyinstaller 打包后执行报错 Failed to execute script pyi_rth__tkinter
Fix tcl/tk libs inclusion in tkinter with Python3.7 under MacOS 使用 Pyinstaller 打包时候报错 3027 ERROR: Tc ...
- python pyinstaller 打包exe报错
今天用python 使用pyinstaller打包exe出现错误 环境pyqt5 + python3.6 在导入pyqt5包之前加上如下代码 import sysimport osif hasattr ...
- Py打包exe报错
Py打包exe报错 下载地址 https://github.com/pyinstaller/pyinstaller 用管理员执行 pip install https:/ ...
- 安装maven工程报错"Failed to execute goal on project...Could not resolve dependencies for project..."
我在qingcheng_interface中Lifecycle目录下执行install命令后报错"Failed to execute goal on project...Could not ...
- Keil报错failed to execute 'd:\Keil\C51\BIN\C51.EXE'
关于老师发的keil软件报错如下: --- Error: failed to execute 'd:\Keil\C51\BIN\C51.EXE' 错误是因为老师直接拷贝的安装目录,里面的文件路径设置仍 ...
- 【spring cloud】在spring cloud服务中,打包ms-core失败,报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project
在spring cloud服务中,有一个ms-code项目,只为所有的微服务提供核心依赖和工具类,没有业务意义,作为核心依赖使用.所以没有main方法,没有启动类. 在spring cloud整体打包 ...
- maven install报错 Failed to execute goal on project my-manager-mapper: Could not resolve dependencies for project com.my:my-manager-mapper:jar:0.0.1-SNAPSHOT:
报错信息为: [ERROR] Failed to execute goal on project my-manager-mapper: Could not resolve dependencies f ...
随机推荐
- java 多线程实现的四种方式
一个线程的生命周期 线程是一个动态执行的过程,它也有一个从产生到死亡的过程. 下图显示了一个线程完整的生命周期. 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程 ...
- 2019-9-29-dotnet-对-DateTime-排序
title author date CreateTime categories dotnet 对 DateTime 排序 lindexi 2019-09-29 14:55:49 +0800 2019- ...
- linux 用户空间与内核空间——高端内存了解
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...
- OAuth_1
OAuth2.0是一个应用之间彼此访问数据的开源授权协议.比如,一个游戏应用可以 访问Facebook的用户数据.用户访问web游戏应用,该游戏应用要求用户通过Facebook 登录.用户登录到Fac ...
- 错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?(转)
错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx. ...
- 阿里HBase高可用8年“抗战”回忆录
2017年开始阿里HBase走向公有云,我们有计划的在逐步将阿里内部的高可用技术提供给外部客户,目前已经上线了同城主备,将作为我们后续高可用能力发展的一个基础平台.本文分四个部分回顾阿里HBase在高 ...
- TableStore最佳实践:轻松实现轨迹管理与地理围栏
摘要: 基于TableStore轻松实现亿量级轨迹管理与地理围栏 一.方案背景 轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹.快递物流流转.车辆定位轨迹等.该场景与地理位置管理类似,核心点与瓶颈 ...
- AcWing 220.最大公约数 欧拉函数打卡
题目:https://www.acwing.com/problem/content/222/ 题意:求1-n范围内,gcd(x,y)是素数的对数 思路:首先我们可以针对每个素数p,那么他的贡献应该时 ...
- switch 使用使用小技巧
for (int i=0;i<100;i++) { switch (i) { case 1 ... 10: NSLog(@"case 1 ... 10: = %d",i); ...
- Android的Context && 安卓常用系统服务(当前运行包名/当前网络状态和开关网络/音频服务/马达服务) (转)
转:http://blog.csdn.net/zhandoushi1982/article/details/8501773 Context字面意思上下文,位于framework 的android.co ...