pyinstaller打包程式時遇到的一系列問題:AttributeError、No module named和PyQt5
2018.09.06 23:47* 字數 813 閱讀 911評論 2喜歡 3
一、背景介紹
公司使用的python環境是Anconda+Python3.6,64位系統。
有一個py程式主要是影象批量處理相關的,涉及到檔案遍歷、字串拼接,於是“自然而然地”在用pyinstaller打包的時候遇到了這個經典報錯資訊:
AttributeError: 'str' object has no attribute 'items'
二、攻克
1.百度查了很多資料無果,在同事的幫助下“科學上網”,很快就精確地找到了一些高人的回覆,在試了很多方案之後,終於找到了【對症的藥】。
2.首先,因為問題都是出在pyinstaller上,網上有很多人遇到pyinstaller裝錯32位或64位版本的,在這裡提供一個最簡單的方法,寫一個hello world的py程式,如果這個能成功打包exe檔案併成功執行,說明和pyinstaller無關,你的環境是對的,只是缺少“一些”第三方依賴檔案。
3.通過查閱stackoverflow上的類似的回答可以得知——報錯雖然是在最後一行,但是向上滾動日誌,可以發現一句話,意思差不多是缺少某個模組(Moudle),我照著回答者的方式往自己的DOS輸出日誌上看,找到了:
No moudle named “setuptools._vender”
因為這句報錯是在前面,所以它才是導致最終打包失敗的原因。當然,這只是針對我的電腦的情況,大家可以根據自己出現的報錯去裝對應的檔案。
網上說的用pip install setuptools的方法對我無效,我找到的是這位高手的解答。很對症,因為我也是anconda,但是安裝完之後還是報錯,這就是第二個坑,我靈機一動,會不會是版本不匹配?因為pyinstaller是最新版本的,那麼裝的setuptools不應該與anaconda匹配,而是要更新到最新版,與pyinstaller的版本去匹配,於是我輸入了下面的指令:
pip install -U setuptools
4.更新完之後,果然這個報錯消失了,然而,打包程序又中斷了,這次報錯是在PyQt5.行了!很熟了,來吧:
pip install PyQt5
抱著試試的心態,果然成了!
Ps. 今天需要在新伺服器上部署環境,進行到最後一步,安裝PyQt5時,顯示某個檔案授權失敗(Permission denied),無法訪問;於是將原先的.pyt檔案全部刪除,重新安裝,就可以了!~
三、感想
這次的打包真是一波三折,要是在以前早就暈了,但現在因為多了很多信心,始終抱著一個心態,“這件事肯定能做成,只是費點事”,於是就這麼解決了。我要感謝我的BOSS教會了我這些!
特意寫下來解決過程,希望能幫助到同樣遇到類似問題的工程師們!