记录一下自己打包一个人脸识别项目的py文件的经历吧,毕竟弄了整整一天,到处都是错误,下次再出现这些错误也能快点解决
我之后的所有命令操作都是在Anaconda对应的命令行进行的。
import face_recognition
import cv2
import numpy as np
import os
import tkinter as tk
import easygui as g
import time
首先使用的是pyinstaller,代码是:
pip install pyinstaller
此时就出现了错误,应该是超时了吧,那么解决办法是使用国内的源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
安装好之后打包,打包的命令是pyinstaller code.py,之后会多出来4个文件
exe文件在./dist/code文件夹下。
此时这个文件夹下有很多文件,如果想只保留exe文件,那么命令是
pyinstall -F code.py
这个程序我在Jupyter Notebook上是没有问题的,但是写到我自己要叫报告的文件夹中就错误。
我在对比两个代码的运行过程之后发现,是因为选择图片的路径上包含中文,将中文改成英文之后,运行代码成功。
可能是因为这些头文件中有哪个不支持中文吧。
那么运行的时候又出现了错误:ModuleNotFoundError: No module named ‘pkg_resources.py2_warn’,解决办法:
我的路径是:
D:\Anacoder\envs\face\Lib\site-packages\pkg_resources
import(‘pkg_resources.py2_warn’)
我网上搜是因为six的版本不对的问题?
要到这个网址里面去下载:
https://pypi.org/project/six/#modal-close
找到最新版,然后网页拉到最下面下载后缀为.gz格式的安装包(windows环境)
然后我是解压到这个目录下:
D:\Anacoder\envs\face\Scripts
然后命令行切换到这个目录:
D:\Anacoder\envs\face\Scripts\six-1.15.0
运行
python setup.py
这一通操作好了之后,重新打包发现还是这个错误,此时我才看到,这个错误的上面有另一个错误,也就是下一个标题:
网上解决方案有很多,我都试了一下,有一种是正解:
由于我的cv2与numpy的版本不匹配,所以导致的错误,此时我降低numpy的版本就行了,之后又经历了一系列错误,比如说超时,没有权限什么的,最终在命令行的代码是这个:
pip install --default-timeout=100 -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple numpy==1.14.5 --user
那么这一关就跨过去了,接下来的错误是
这个问题是因为pyinstall不会将.dat(甚至更多)的文件一起打包
解决方案:
直接复制粘贴未打包的文件,我这里直接将
D:\Anacoder\envs\face\Lib\site-packages
唉我都有点累了
这是因为我用到了有关windows界面的函数,但是没有引用PyQt的platform文件夹下的内容。
我搜索plugins
然后找到的路径是
D:\Anacoder\envs\face\Library\plugins
找到文件,但是加了个s?
看看里面的内容
有这个,那就好了,我将platforms文件夹复制到打包好后与exe同级的文件夹目录下。
那么这个问题就解决了。
其实一开始做到错误’six’模块找不到的时候我心态就崩了,毕竟它的问题是由于另一个我没看到的错误导致的,所以网上的解决办法都无效,周围也找不到可以帮我解决问题的人。怎么办?我不知道该怎么办。
还好这时候是晚上10点多,我在找不到办法之后,选择先去做别的事情,比如洗漱,刷最右什么的。
在第二天我弄了一个小时左右的时候,那时候我内心已经没有感觉了,毕竟这个人工智能作业已经搞了我一个星期,从一开始的什么都不会,在做的时候走了很多弯路,包括做完了之后发现效果不行重新选择算法。
第一次打包py文件,别的同学20分钟搞定,而且没出现任何错误,一开始我也是挺焦急的,但是没用,作为一个ACMer就是要学会耐心,所以我花了一天的时间把它打包好。
好像其实也没什么感想,在发现最终exe文件能用的时候,其实也就开心了一下,然后就抓紧时间发给老师了,没有啥感jio,毕竟
我女朋友催我去吃饭了。