嘗試使用Pyinstaller打包yolov5中detect.py文件(含pytorch框架)所遇到的問題
本人嘗試使用pyinstaller 將yolov5中的檢測文件打包成windows可執行的.exe 執行檔,過程中遇到了許多問題,在嘗試了網路上各種方式與自己嘗試了方法後終於成功了!!(灑花 ,因此來分享我這次的心路歷程
我在打包時是使用乾淨的環境去打包,如此下來打包的exe會較小
使用python3.7及torch1.7也是認為較為穩定才使用這個組合
至於使用anaconda管理環境方便又簡單,只需輸入就可創造指定版本的python環境,如下創造指定環境及激活環境
conda create --name martin python=3.7
activate martin
1.打包成功所使用的 anaconda環境
python =3.7.11
pytorch =1.7.1
pyinstaller = 4.5.1
numpy = 21.2.4
pillow = 6.2.2
opencv-python = 4.5.3
mayplotlib = 3.4.3
2.確認目標python檔可以在環境下正常執行
使用pyinstaller打包會花許多時間在打包環境,因此事前確認一下要打包的python檔是否可以執行也是很重要的
3.對文件下檔案使用打包指令
接著就可以使用pyinstaller 打包文件,在這邊-F是將所有東西包成一個pytohn檔,使用-D則是將東西包成一個 資料夾,我在測試的時候都用-D測試,也方便看是否少了某些遺漏項
完成可以看到Successfully的提示
4.除錯
打包完畢執行,第一個問題是發現pytorch框架底層缺少了caffe2_nvrtc.dll or one of its dependencies,經過檢查打包後的檔案後發現 caffe2_nvrtc.dll 確實有被打包在內的
在使用Depends檢查了這個.dll檔發現pyinstaller 少包了kernel32.dll 和 nvrtc64_102_0.dll 兩個 .dll檔,因此將這兩個.dll補齊後便可除錯
第二個問題是在打包Pillow時出現了問題,原先使用版本是 pillow = 8.3.2,再參考了網路上的解法是將pillow降版本打包,因此我將pillow降到6.2.2版再進行打包排除了此錯誤
5.總結
exe的使用方式就如同使用python的方式一樣,該放的文件也是要放在同一個資料夾,Pyinstaller打包是將python 文件中所import的文件或環境都包在同一個exe方便執行,使用起來非常方便,但也要注意有些libary並不是這麼友善的讓你打包,必須靠自己去找出缺失的打包項
打包環境也都可以在 /anaconda/envs/../site-packages /中看到,也方便大家去檢查,最後祝大家都可以順利打包