更新:打包後執行exe提示no model named usb,同樣把site-packages下USB資料夾拷到打包的根目錄,打包後exe是能正常開啟的。但是實際上USB無法正常使用,提示Nobackendavailable。查了資料,原因是缺少libusb*。dll。網上解決辦法也很多,大多比較複雜。這裡依舊簡單粗暴,把libusb0。dll複製到打包後的Mainwindow根目錄下,USB通訊不再報錯。

(檢索libusb0。dll可用Everything,超級好用)

作為一個硬體工程師,最近不務正業搞了個三軸機械臂工裝,搞了底層MCU程式碼,上位機用python開發。

此前python僅用於工作中的資料處理,這是第一次正經用python寫上位機,因此需要打包成exe可以給其他人用。

程式碼用pycharm寫的,打包需要先“win+r”,執行cmd,透過“pip install pyinstaller”來安裝這個打包工具。

網上打包的方式大概看了下,主流有兩種,一種是直接pyinstaller -F main。py -p xxx。py打包,打包後main。exe自己獨立在dist路徑下,其他檔案依舊在外面。另一種是先生成。spec中間檔案,透過修改這個spec再來打包成最終的exe。

試了兩種方式,第一種自己其實也會生成spec,但是打包後文件太亂,不好傳遞給別人,這裡選擇第二種。

打包後長這樣

python多檔案打包exe

這裡我的主檔案是Mainwindow。py,其他檔案放在Mechanical_arm裡面。

cd進這個目錄,執行pyi-makespec Mainwindow。py,生成spec檔案。開啟spec檔案,

python多檔案打包exe

這裡需要修改的只有紅框處,把你需要打包的其他副檔案一起包進去,如果跟Mainwindow在同一路徑下則不需要加路徑。然後在同一路徑下,再執行pyinstaller -D Mainwindow。spec

python多檔案打包exe

打包完成後,在dist\Mainwindow可以找到這個可執行檔案。給別人時,整個Mainwindow複製走就好,很方便。

python多檔案打包exe

雙擊這個exe執行我們的程式, 很完美,一個烏漆嘛黑的除錯視窗一閃而過,如果不是我眼睛取樣率夠高,我都不知道它實際是有反應的。發生了什麼錯誤呢?不知道。。。

旁邊坐了一個軟體的同事,隨口問了下他打包python後執行一閃而過,怎麼處理。他告訴我用截圖工具,在視窗一閃而過時把它截圖截下來,看下報錯內容是什麼。好傢伙,這是要拼手速,視窗停留時間目測在0。5s內啊!截了幾次,總算截到一點,看到“most call。。。”沒了。。。遂百度,方法一是在main檔案里加一個輸入語句input(“please input any key to exit!”),方法二是直接cd進目錄,用‘。\xxx。exe’執行。直接採用方法二,總算看到了,原來是no model named serial。

早就聽說這個打包工具常丟包,這是把串列埠包給丟了。遂百度,各種 -p xxx ——hidden-import xxx 試了各種方式,包括增加環境變數把模組路徑\Lib\site-packages,無果,依舊提示找不到。

直接把site-packages目錄下的serial資料夾複製到打包的根目錄一試,竟然OK了。。。

記錄於此,當做自己的除錯筆記吧

不定期更新技術文章