基于pyinstaller封装python程序为exe文件过程可能会遇到很多问题,主要可能会是相关封装的库没有安装,需要要根据实际遇到的问题去百度解决,这里记录几个常见的问题。
封装时在终端使用命令
1.假设封装example.py
pyinstaller -F example.py
2.如果有中文路径或命名的程序,可能会报utf-8的问题,这时需要先在终端输入chcp 65001
chcp 65001
然后再输入
pyinstaller -F example.py
3.报错:RecursionError:maximum recursion depth exceeded
在报这句话的时候,程序应该已经编译生成了example.spec文件,打开这个文件,在开头添加这两行代码:
import sys
sys.setrecursionlimit(1000000) #可以更改数字来改变maximum
然后再终端输入如下命令执行封装
pyinstaller -F example.spec
4.报错:ModuleNotFoundError: No module named ‘tensorflow.python._pywrap_tensorflow_internal’
去到anaconda安装路径下:
D:\anaconda\Lib\site-packages\tensorflow\python
找到这个文件:
_pywrap_tensorflow_internal.pyd
复制到example.py同级目录下,重命名为:
tensorflow.python.__python._pywrap_tensorflow_internal.pyd
运行命令
pyinstaller -F .\example.py --add-data "./tensorflow.python.__python._pywrap_tensorflow_internal.pyd;."
pyinstaller 对 --add-data 的命令的解释为:
–add-data < SRC;DEST or SRC:DEST >
Additional non-binary files or folders to be added to the executable. The path separator is platform specific, os.pathsep (which is ; on Windows and : on most unix systems) is used. This option can be used multiple times.
即第一个参数SRC是要导入的数据,第二个参数DEST是导入的参数在运行时相对主程序的路径。
在windows下用; 分割,在linux下用: 分割。
参考:
https://blog.csdn.net/buchunjiedexin/article/details/79764604
然后像上面一样修改example.spec,然后运行命令:
pyinstaller -F example.spec
也就是报错3的解决方法。
经过多次测试,报错4暂时还是没有解决。
5.报错4解决办法
应该是tensorflow_gpu版本的问题,原来是1.8,后面用1.13版本轻易的成功解决了,因为需要GPU加速,对应的CUDA版本是10.0