我在windows+anaconda的前提下,使用pyinstaller将python程序打包成exe文件时陆续遇到很多问题,在这里总结一下。
pyinstaller介绍
首先安装pyinstaller,直接使用命令pip install PyInstaller即可。
安装好后,对于需要打包的文件,在该文件目录下使用类似如下命令即可。这里的xxx.py代表的是在程序中执行入口的py文件。
pyinstaller xxx.py
上面的命令没有加任何参数,pyinstaller的参数如下图。
遇到的问题汇总
1.首先要保证在编辑器里程序可以运行,并且在打包时要把程序关掉。
每次打包失败了以后最好吧spec文件删除掉,那是上一次打包遗留的文件。
还有就是程序里尽量不要用import,尽量用from…import…,使用import的话,在打包的时候会将整个包都打包到exe里面,从而使最终的包太大。
2.我一开始直接用cmd命令执行打包语句,遇到了ImportError问题,报错如下。
报错的意思是找不到某个DLL文件,这很奇怪,不可能是环境问题,因为在编辑器里可以正常运行。突然想到我使用的anaconda 的环境,于是打开anaconda prompt,再次执行打包语句,不再出现这个问题。
3.然而又出现了新的问题。。还是ImportError,报错如下。
第二句是在第一句的下面出现的。也就是在第271987个信息中,出现的import问题,解决这种问题就一个关键点:重装。
比如我这里是在bokenh出现了问题,好的,把bokeh卸载了重装,问题就没有了。再出现这种问题就继续重装。
4.然而,还是不成功,又出现了下面的报错。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 130: invalid continuation byte
这是编码格式问题,解决方法就是先在控制台中输入 chcp 65001,然后在执行打包语句。
5.不出我所料,还是有问题!报错如下。
Pyinstaller:Exception: Cannot find PyQt5 plugin directories
意思很明白了,不多说了,安装PyQt5,已经安装了就重装一遍。
6.终于打包成了exe文件,就在项目文件的dist中,结果一运行,又出现了问题:
ModuleNotFoundError: No module named 'XXX'
因为我用了第三方库,解决的方法参考这个网址:https://blog.csdn.net/zyc121561/article/details/79562935
到这里终于成功了。。。有点心累