pyinstaller打包,exe文件cmd运行无报错提前结束

问题遇到的现象和发生背景

利用pyinstaller将python程序打包成exe文件,但一直运行闪退,而且没有报错。该程序是调用讯飞语音识别dll做语音识别,但每次一调用麦克风读取语音时就立马程序结束,并且没有错误提示。在pycharm中调试就没有问题

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容

img


每次一调用麦克风就程序结束,而且在cmd中启动该exe文件也是同样的效果,没有报错提示

我的解答思路和尝试过的方法

一开始以为是文件依赖问题,但尝试过多文件打包,生成的exe文件也是同样问题

我想要达到的结果

不会闪退,并且最后会输出识别的内容

您好,建议测试下打包前的demo.py文件,是否能在该目录下,命令行中正常运行。如果不能,则是打包过程的问题。如果能,则另说

你是不是没有阻塞主线程
当程序执行完成之后,程序就推出了
你可以在末尾加入

import os 
os.system("pause")

平常自己写python程序, 并使用pyinstaller打包, 遇到无法正常运行的情况时,我是这样查看故障原因的,希望能帮到你
1.首先打开CMD
2.输入cd + 执行文件所在文件夹地址, 回车执行指令
3.输入执行文件(.exe结尾那个)的绝对路径, 回车执行指令
4.最后可以看到报错信息/无法执行的原因
如下图所示

img

pycharm中调试没问题,你检查一下工程文件当前目录下是不是有哪个依赖的文件没打包进去
或者用depends查看一下讯飞dll是否依赖哪个库,没打包进去

检查一下您的可执行程序是否需要外部的动态链接库、配置文件等等,pyinstaller是不会打包这些文件的,需要你手工将exe运行程序需要的配套文件按照需求路径配置好才行

  1. Pycharm下执行没有问题,那么说明 代码是OK 的
  2. 打包后报错,可能是代码访问某些文件的时候的路径(相对路径)有问题。

解决方法:
写一个bat文件,调用 exe,后面加一个 pause,看看exe报的是什么错,然后继续定位

应该是有某个依赖包没有打包进去吧

检查两个主要方面的问题:
1、依赖,程序本身的依赖,第三方库的依赖等等,确认这些包都打到包里了。
2、确认python运行时也打进去了,如果没有调整下。

其次打好包的程序最好找一台没有python环境的机器进行运行看日志,这样子是比较好进行查问题的。

应该是包没进去,或者绝对路径的问题。

如果使用了第三方依赖,请考虑打包成文件夹而不是单个exe文件。然后直接把整个库复制到目录里。我曾经打包PygameZero游戏时就必须这么干。