pyinstaller no module named “”

環境:window7 64位,pyinstaller 3.3.1 ,python2.7.14

在pip install pyinstaller之後想把文件打包成exe文件,但是出現下面的錯誤,說 no module named message,下面就開始各種百度,各種找,下面一一列舉所嘗試的工作。

首先大家進到python安裝目錄,打開到下面圖片的目錄,會看到有一個message.py的文件,所以嘗試方法(1),但是還是報錯:

實際上,報錯所說的no module named message並不是上面圖中的那個message.py文件,而是下圖mime子文件夾裏面的message.py文件,知道這個以後,估計問題就很好解決了。


注:路徑一定不要包含中文,切記切記;另外一定要以管理員身份打開cmd或者powershell窗口,不然可能會出現ascii編碼問題。

先在cmd窗口進入到py文件目錄下,

(1)說缺包,那咱們就補上,於是就輸入  pyinstaller -F httpRoute.py --hidden-import message--clean 導入隱藏的包,運行之後結果還是如上圖所示。

(2)在stackoverflow上找到一個大神的提問,照着輸入pyinstaller --name=httpRoute --windowed "F:\project_cx\wanggong\httpRoute.py" -y --hiddenimport email.mime.message --clean  --onedir  結果運行之後還是報錯,這就奇怪了明明是同樣的問題,怎麼我試就不行了呢,直到後面我才發現他後面跟了一個 --onedir,這個參數的意思就是將生成的exe文件放到現在cmd所處的目錄環境下,因爲我的路徑包含中文所以才報錯的,注意儘量少用中文,免得出現麻煩。

(3)經過多次嘗試,在cmd窗口,將路徑切換到py文件目錄後,輸入pyinstaller -F httpRoute.py --hidden-import email.mime.message --clean,運行完成以後,雙擊exe文件還是報錯,但是這一次不是 no module named message的錯誤了,是報no module named image錯誤,一看到這個錯誤我簡直欣喜若狂,看來這個問題有眉目了呀;然後繼續導入隱藏包,輸入pyinstaller -F httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image  --clean ,又沒成功說又缺包,然後繼續導,陸陸續續下來,在輸入pyinstaller -F httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image --hidden-import email.mime.text --hidden-import email.mime.multipart --hidden-import email.mime.audio --hidden-import email.mime.base --hidden-import email.mime.application --hidden-import email.mime.nonmultipart --clean之後,終於成功了。真的是開心。

(4)因爲已經測試成功,並且不需要彈出cmd窗口,所以加個參數-w,pyinstaller -F -w httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image --hidden-import email.mime.text --hidden-import email.mime.multipart --hidden-import email.mime.audio --hidden-import email.mime.base --hidden-import email.mime.application --hidden-import email.mime.nonmultipart --clean生成exe文件以後,發給過別人,並且測試成功。

小結:這個問題一直困擾了我一整天,期間我是看各種文檔說導這個那個庫,降pyinstaller版本,但是最後還是沒能解決,看到stackoverflow那個文檔以後還弄了一下午,弄這麼長時間的原因就是一個是包含中文,不知道中文路徑竟然還會報錯,另外一個原因是對於導入庫的理解還不是很深,沒能理解 import email.mime.message是什麼意思,反而覺得這個東西很奇怪。實際上我們在寫py程序的時候經常會import pandas等等,然後使用pandas裏面的庫,使用 pandas.DataFrame等,也都用過,不過一直在用並沒有理解其內在的含義,所以纔會造成這種情況。

後面覺得上面的有點長,嘗試了以下幾種,不過都沒有成功:

(1)使用pyinstaller -F httpRoute.py --hidden-import email.mime --clean,嘗試導入email.mime裏面的所有庫(包含message),但是報錯。

(2)pyinstaller -F -p D:\python\Lib\email\mime F:\project_cx\wanggong\httpRoute.py --clean 這個語句也是一樣想整個導入,但是報錯。

-p參數是導入包的目錄

建議:在將文件打包成exe文件時,沒有用到的模塊儘量刪除掉,不然會導致exe文件很大。




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