为什么python生成exe程序闪退_【Python GUI】pyinstaller打包成exe文件后闪退,failed to execute...

最近在帮忙写个小工具,原本在Python3的环境上写的,结果客户设备那边受限只能用Python2,于是开始了tkinter从Python3到Python2的变迁。

在功能代码没多大变化的基础上,这个GUI的壳确发生了意想不到的事情。打包好的exe文件,双击闪退,在cmd中执行也完全看不到详细报错信息,只是在最后出一个“Failed to execute script xxx”。

up-119332bd8da0517bbab314639347751cb1e.png

这是怎么回事,开始疯狂百度,大致有以下几种猜测。

缺少必要的依赖;

打包环境和执行环境的差异;

Python2和Python3对tkinter的支持差异。

基于以上3中猜测,开始了这次试炼。

缺少必要依赖?那按照网上教程找的打包的过程日志文件,发现缺少少了一堆依赖,我的个乖乖,赶紧装。然后重新打包,发现还是缺原来的那些依赖。嗯,我装的包难度飞了?不可能,此路有蹊跷,可能不是问题的根源,换下一条路。

打包环境和执行环境的差异?不能吧,我之前可是打包exe后到了一个完全没有Python环境的PC上跑的,没道理这次就要和打包环境扯上关系了吧?要是这样,移植到别的机器上还玩个啥?应该也不是,再换。

Python2和Python3对tkinter的支持差异?网上查了下,好像确实有这个可能,不管怎么说,不撞南墙不回头,我还是都试试吧。

我的代码里,Python3引入tkinter是这么写的from tkinter import *;Python2引入tkinter好像是这么写from Tkinter import *,而且上次在Python2下就是这么写的。难到?写的和大小写有关。改一个(改成tkinter),执行,打包,居然跑起来了,我勒个去。居然栽在了这条阴沟里,居然还是不明所以,那怎么行,继续百度“tkinter和Tkinter的区别”,于是找到了https://blog.csdn.net/jjjndk1314/article/details/80620139

好吧,还有这种。个人感觉,就是系统里有俩包一个叫tkinter,另一个叫Tkinter。于是我打开了我两个Python的IDLE试了一下。

up-09ecb2bcc9eaafb994d7360721817baddff.png

up-22bb501866364c46d0fc7cb61b1ced477ba.png

可我明明写对了啊,咋还是报错呢?我现在只能怀疑我的Pycharm打包时的问题了,可是又没有证据,这次就只能这样了。暂时解决了这个问题,等后面用的更多,了解更透后再回来补坑。

2020.03.06 续帖

今天,我在打包一个小工具,又踩到了同一个坑。

环境:Windows10 + PyCharm + Python3.5

报错信息:Failed to execute the script xxx.

解决办法:打包命令不要添加 -w 参数,即 pyinstaller -F xxx_script.py

思考原因:在使用pyinstaller打包exe文件时,-w 参数是在使用了GUI库的前提下,不弹出黑色的命令窗。如果没使用GUI库,那就不要用 -w 参数,否则在执行打包好的exe文件是就会报 Failed to execute ... 错误。

2020.03.13 续帖

最近正好在写小工具,在打包时想不显示黑色命令提示框。于是百度了下,结果如下:

from tkinter import *

tkinter.Tk().withdraw()

此办法正好2020.03.06续帖的一个补充,既然是不使用GUI,就不能用 -w 参数打包。那反过来我用了GUI,但隐藏了起来,那就可以用 -w 参数打包了。

这也算是解决不能执行(failed to execute)这个问题的权宜之计了。

2020.05.23 续帖

如果已打包好的exe文件,双击可正常执行,但放到Windows【任务计划程序】执行,却依旧出现“failed to execute xxx”的报错,可能是因为环境变量和路径的问题。

解决办法:在创建【任务计划程序】的任务时,指定某可执行文件的同时,将此可执行文件的存放路径填入到“起始于”中,保存即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值