記錄一下自己打包一個人臉識別項目的py文件的經歷吧,畢竟弄了整整一天,到處都是錯誤,下次再出現這些錯誤也能快點解決
我之後的所有命令操作都是在Anaconda對應的命令行進行的。
目錄
- 代碼所包含的頭文件:
- pyinstaller安裝錯誤
- 運行代碼選擇預測圖片時TypeError: 'NoneType'錯誤
- ModuleNotFoundError: No module named 'pkg_resources.py2_warn'錯誤
- ModuleNotFoundError: No module named 'six'錯誤
- ImportError: numpy.core.multiarray failed to import錯誤
- RuntimeError: Unable to open ./shape_predictor_68_face_landmarks.dat錯誤
- qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" 錯誤
- 總結
代碼所包含的頭文件:
import face_recognition
import cv2
import numpy as np
import os
import tkinter as tk
import easygui as g
import time
pyinstaller安裝錯誤
首先使用的是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
運行代碼選擇預測圖片時TypeError: 'NoneType’錯誤
這個程序我在Jupyter Notebook上是沒有問題的,但是寫到我自己要叫報告的文件夾中就錯誤。
我在對比兩個代碼的運行過程之後發現,是因爲選擇圖片的路徑上包含中文,將中文改成英文之後,運行代碼成功。
可能是因爲這些頭文件中有哪個不支持中文吧。
ModuleNotFoundError: No module named 'pkg_resources.py2_warn’錯誤
那麼運行的時候又出現了錯誤:ModuleNotFoundError: No module named ‘pkg_resources.py2_warn’,解決辦法:
我的路徑是:
D:\Anacoder\envs\face\Lib\site-packages\pkg_resources
然後找到
找到裏面
import(‘pkg_resources.py2_warn’)
這句話,註釋掉即可
ModuleNotFoundError: No module named 'six’錯誤
我網上搜是因爲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
這一通操作好了之後,重新打包發現還是這個錯誤,此時我纔看到,這個錯誤的上面有另一個錯誤,也就是下一個標題:
ImportError: numpy.core.multiarray failed to import錯誤
網上解決方案有很多,我都試了一下,有一種是正解:
由於我的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
那麼這一關就跨過去了,接下來的錯誤是
RuntimeError: Unable to open ./shape_predictor_68_face_landmarks.dat錯誤
這個問題是因爲pyinstall不會將.dat(甚至更多)的文件一起打包
解決方案:
直接複製粘貼未打包的文件,我這裏直接將
D:\Anacoder\envs\face\Lib\site-packages
這個目錄下的
放到打包之後與exe同級的文件目錄下面即可。
qt.qpa.plugin: Could not find the Qt platform plugin “windows” in “” 錯誤
唉我都有點累了
這是因爲我用到了有關windows界面的函數,但是沒有引用PyQt的platform文件夾下的內容。
我搜索plugins
然後找到的路徑是
D:\Anacoder\envs\face\Library\plugins
找到文件,但是加了個s?
看看裏面的內容
有這個,那就好了,我將platforms文件夾複製到打包好後與exe同級的文件夾目錄下。
那麼這個問題就解決了。
總結
其實一開始做到錯誤’six’模塊找不到的時候我心態就崩了,畢竟它的問題是由於另一個我沒看到的錯誤導致的,所以網上的解決辦法都無效,周圍也找不到可以幫我解決問題的人。怎麼辦?我不知道該怎麼辦。
還好這時候是晚上10點多,我在找不到辦法之後,選擇先去做別的事情,比如洗漱,刷最右什麼的。
在第二天我弄了一個小時左右的時候,那時候我內心已經沒有感覺了,畢竟這個人工智能作業已經搞了我一個星期,從一開始的什麼都不會,在做的時候走了很多彎路,包括做完了之後發現效果不行重新選擇算法。
第一次打包py文件,別的同學20分鐘搞定,而且沒出現任何錯誤,一開始我也是挺焦急的,但是沒用,作爲一個ACMer就是要學會耐心,所以我花了一天的時間把它打包好。
好像其實也沒什麼感想,在發現最終exe文件能用的時候,其實也就開心了一下,然後就抓緊時間發給老師了,沒有啥感jio,畢竟
我女朋友催我去喫飯了。