使用pyinstaller编译生成exe文件时出现错误,双击exe文件提示failed to execute script

目录

背景

环境配置

编译打包自己的程序

遇到错误


背景

最近在用python做人工智能相关的内容,其中用到了调用摄像头,以及调用动态链接库,程序调试完成之后想编译生成exe可执行文件时遇到了大坑,一番查找后终于爬出了坑,踩坑过程不再敷述,直接说解决办法,做个记录,也希望能给遇到此问题的朋友一个参考。

环境配置

我的环境是python3.6.5

首先是安装

pip3 install pyinstaller

测试编译hello world,新建一个helloworld.py文件,内容如下:

import time
print('hello world!')
time.sleep(5)

打开cmd,cd到helloworld.py目录下,输入:

pyinstaller -F  helloworld.py

其中-F代表生成单个可自行文件,在生成的dist文件夹下找到helloworld.exe,双击程序控制台打印hello world!,代表程序打包成功,说明pyinstaller安装没有问题。

编译打包自己的程序

打开Anaconda Prompt或者cmd,cd到主程序目录,输入:

pyinstaller -D -w Main.py

其中Main.py是我的主程序入口

遇到错误

1. RecursionError: maximum recursion depth exceeded,这是因为超过最大递归深度导致,解决办法:打开生成的Main.spec,在最前面加入下面两行代码:

import sys
sys.setrecursionlimit(1000000) #例如这里设置为一百万

继续打包:

pyinstaller -D -w Main.spec

切记一定是用.spec继续打包,不然上面设置的最大递归深度会被新的.spec文件覆盖

2. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 81: invalid continuation byte,解决办法:在cmd输入:

chcp 65001

以上参考:pyinstaller打包报错: RecursionError: maximum recursion depth exceeded,UnicodeDecodeError_lak的专栏-CSDN博客 

3. 打包过程中会出现若干个warning,这个可以不用管,之前打包失败以为是warning的问题,比如提示没有安装gtk,然后到处找解决办法,最后还把Anaconda给弄出了问题,所以请直接绕开这个坑;但是出现ImportError:No module named 'xxx',需要先对现相关模块进行安装。

4. 打包完成后目录下会生成一个build文件夹和一个dist文件夹,因为调用的库比较多,选择的是-D打包多个文件,会在dist文件夹下生成Main文件夹,在Main文件夹下,有Main.exe的可执行文件,双击后出现错误failed to execute script。这个坑爬了一下午才爬出来,原因是程序里引入了相对路径,比如../../Anaconda3,在打包之后文件相对路径产生了变化找不到相关目录或者文件,从而产生错误,如果相对路径是当前目录,可以直接把引用的文件拷贝到Main文件夹下即可,如果是其程序或者静态链接库,就需要把相对路径改为绝对路径,比如../../Anaconda3改为C:/ProgramData/Anaconda3,调试程序没有问题后再次执行:

pyinstaller -D -w Main.spec

大功告成,双击exe即可。

### 回答1: 如果在使用 pyinstaller 编译 Python 脚本为 exe 可执行文件后,双击 exe 文件后程序瞬间就会关闭,那么可能是因为编译过程中出现错误。你可以尝试使用 pyinstaller 的 `--debug` 选项来调试编译过程中的错误。 例如,你可以使用以下命令来编译 Python 脚本: ``` pyinstaller --debug script.py ``` 这将生成一个名为 `script.exe` 的可执行文件,并在命令行窗口中显示编译过程中的错误信息。你可以通过查看这些信息来了解 exe 文件瞬间关闭的原因。 另外,你还可以尝试使用 pyinstaller 的 `--log-level` 选项来查看日志信息,这可能会有助于你找到问题的原因。例如,你可以使用以下命令来编译 Python 脚本: ``` pyinstaller --log-level=DEBUG script.py ``` 这将生成一个名为 `script.exe` 的可执行文件,并在命令行窗口中显示更多的日志信息。 此外,如果 exe 文件瞬间关闭的原因是 Python 脚本中的错误,你可以尝试使用 Python 自带的调试工具来查找问题。例如,你可以在 Python 脚本中加入 `import pdb; pdb.set_trace()`,然后使用 pyinstaller 编译脚本,这样在执行 exe 文件 ### 回答2: Python使用pyinstaller编译生成可执行文件后,双击exe打开瞬间就关闭通常是由以下问题导致的: 1. 异常错误:程序在某行代码运行发生异常,导致程序崩溃并关闭。这可能是由于编译过程中某些依赖项未被正确打包导致的。解决方法是检查代码中存在的问题,并确保程序所需的所有依赖库被正确地导入和使用。 2. 控制台窗口闪现:在使用pyinstaller编译生成exe,默认情况下会同生成一个控制台窗口。在某些情况下,控制台窗口可能会在打开后立即关闭,导致程序无法正常运行。解决方法是使用命令行参数`--noconsole`或修改pyinstaller配置文件,将控制台窗口禁用。 3. 缺少资源文件:如果程序依赖于某些资源文件(如图像、配置文件等),编译生成exe文件可能无法正确地访问这些资源文件,导致程序无法正常运行。解决方法是确保资源文件被正确地打包到可执行文件中,并在代码中使用正确的路径来访问这些资源。 4. 运行权限问题:有在某些操作系统上,可执行文件需要管理员权限才能正常运行。如果没有足够的权限,双击exe文件可能会导致程序瞬间关闭。解决方法是右键点击exe文件,选择“以管理员身份运行”来启动程序。 总结:Python使用pyinstaller编译生成exe文件瞬间关闭可能是由于代码异常、控制台窗口闪现、资源文件缺失或权限问题所导致。需要逐一排查问题并解决,以确保程序能够正常运行。 ### 回答3: Python使用pyinstaller编译exe可执行文件后,双击exe打开瞬间就关闭可能是由于以下几个问题导致: 1. 程序报错:在编译过程中,可能出现错误,但是这些错误并没有被正确地显示出来。运行若有报错,程序会立即关闭,无法执行正确的操作。在编译之前,最好在命令行中运行.py文件,以查看是否有报错信息。如果有报错,需要修复并重新编译。 2. 缺少依赖项:有候,编译exe文件可能缺少某些依赖项,导致程序无法正常执行。解决这个问题的方法是手动将缺少的依赖项添加到exe文件的目录中,或者使用pyinstaller的"--add-data"参数将依赖项包含在exe文件中。 3. 资源文件路径问题:当程序涉及到读取外部文件(如图片、音频等),如果资源文件的路径不正确,程序也会在运行立即关闭。需要确保在编译exe文件,资源文件的路径是正确的。 4. 使用了图形界面相关的库:在编译exe文件,如果使用了某些图形界面相关的库(如PyQt、Tkinter等),可能会出现兼容性问题导致程序无法正常运行。这需要查看官方文档或调整编译参数以解决兼容性问题。 总之,双击exe文件打开后立即关闭可能是由于程序报错、缺少依赖项、资源文件路径不正确或者兼容性问题导致的。解决这个问题的方法是仔细检查编译过程中是否有报错,确保所有的依赖项都被正确处理,并检查资源文件的路径是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值