网上的很多方法都是直接用pyinstaller -F python文件名。但是这种方法通常会提示少各种各样的库。于是,采用另一种方式,分两步解决:
1.先用pyi-makespec将pyhton文件生成.spec文件:
pyi-makespec --noupx -F --hidden-import=numpy.core._dtype_ctypes --hidden-import=tensorflow --hidden-import=generator --hidden-import=box --hidden-import=yolov3 --hidden-import=yololoss --hidden-import=annotation --hidden-import=darknet53 --hidden-import=weights --hidden-import=yolohead --add-data yolov3.weights;. --add-data model/weights.h5;model testyolo_bs.py
解释一下这里的几个参数: --noupx :防止运行时弹出黑色窗口。
-F : 只生成exe文件(不需要任何的依赖文件,全部打包在exe里面)
--hidden-import : 显式指定依赖的库(因为这些库,pyinstaller找不到,需要自己添加)
--add-data : 指定需要的资源文件,格式为 原来的地址;打包进exe里面的地址
2.然后使用命令 pyinstaller -F XXXX.spec来生成exe。这其中可能会报编码错误的问题,因为你的源文件中有中文注释,或者中文的字符串,这些都要删除。然后在输入命令试试。结果还是会报编码错误。现在就开始抓狂了,顿时不知道如何下手。在网上找了下解决方法。在dos下输入 chcp 65001。这个数字是什么我也不知道。反正输入这个命令之后的命令行会按照utf-8的编码格式来处理。然后再输入pyinstaller -F XXXX.spec试试。发现打包成功了。在dist文件夹下生成了exe文件。在命令行运行。发现有很多的路径错误。此时,,我只想出去抽根烟静静。。突然想到,既然都打包成功了,运行时报错可能是资源路径不对。那就把相对路径全部替换成绝对路径吧(虽然在生产环境是不可能这么干的)。这次发现可以正常运行了。然后我突然发现是exe放的位置不对。我把exe拷贝到源文件下,然后还是用相对路径。这次发现也能正常运行。说明exe并没有吧这些资源文件打包进去,实际部署的时候还是需要将资源文件放到相应的位置。
解决问题的时候一定要头脑清晰,细心排查,问题可以一个个排除,千万不要幻想一次性搞定。