嘗試使用Pyinstaller打包yolov5中detect.py文件(含pytorch框架)所遇到的問題

Martin Lin
Oct 1, 2021

--

本人嘗試使用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 /中看到,也方便大家去檢查,最後祝大家都可以順利打包

--

--

Martin Lin
0 Followers

我是大千,目前就讀中山大學資訊工程系(NSYSU -CS )二年級,有問題歡迎聯絡我 Email: exexzxzpo@gmail.com