pyinstaller打包程序時遇到的一系列問題:AttributeError、No module named和PyQt5 一、背景介紹 二、攻克 三、感想

一、背景介紹

    公司使用的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教會了我這些!

特意寫下來解決過程,希望能幫助到同樣遇到類似問題的工程師們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章