使用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

以上参考:https://blog.csdn.net/ljt350740378/article/details/96134208 

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即可。

 

 

 

你可能感兴趣的:(使用pyinstaller编译生成exe文件时出现错误,双击exe文件提示failed to execute script)