pyinstaller打包可執行文件,存放路徑包含中文無法運行的解決方案

一、實驗環境

1.Windows7x64_SP1

2.anaconda2.5.0 + python2.7(anaconda集成,不需單獨安裝)

3.pyinstaller3.0

二、問題描述

1.使用如上環境,pyinstaller打包生成的exe文件,存放在本地,如果路徑中包含中文,程序無法運行;exe程序如果使用中文命名,程序同樣無法運行。

三、解決方式

1.查看pyinstaller網站

https://pypi.org/project/PyInstaller/

2.有如下描述

3.更換實驗環境

1.Windows7x64_SP1

2.anaconda3.7 + python3.7(anaconda集成,不需單獨安裝)

3.pyinstaller3.5        #使用pyinstaller3.0,打包時報錯

4.打包exe程序,存放路徑包含中文,exe程序可以正常運行

補充:pyinstaller的使用和幾個坑

pyinstaller是一個非常簡單的打包python的py文件的庫。用起來就幾條命令就夠瞭

直接pip install pyinstaller 會下載到最新版的 3.3的pyinstaller,和之前版本的語法是不同的,這個版本直接cmd裡輸入

pyinstaller X:\XXX\XXX.py 就可以瞭 生成的文件就在c盤user\用戶名\dist 下,而用戶名文件下還有個buld裡面存放瞭她運行的中間文件,裡面有個warn文件詳細記錄瞭打包的錯誤,雖然沒什麼卵用,但至少可以拿來百度下騙騙自己。。。哈哈

另外說幾個非常重要的問題

1.命令使用pyinstaller和pyinstaller.exe結果都是一樣的

2.-w是不顯示命令窗口, -i 圖標文件的路徑 這是改變圖標的,但是我發現隻能改變任務欄裡的和命令窗口的圖標,並不能改變exe文件的圖標。另外這些參數要加載pyinstaller和路徑中間。

3.有一些代碼需要調用一些圖片和資源文件的,這是不會自動導入的,需要你自己手動復制進去才行。不然exe文件運行時命令窗口會報錯找不到這個文件。

4.也是最坑的一點。就是當你使用錯誤的參數去打包或者打包到一半中斷,等等此類運行到一半沒瞭的情況。會導致你原來的py文件變成一個0KB的空文件。裡面的代碼會全部消失!!!所以以後需要有個良好的習慣,就是復制一份代碼出來,用這個副本進行打包。並且參數出錯,或者打錯瞭導致失敗時,檢查下副本文件的py文件是否還存在再繼續重新打包,不然打出來的就是空的文件,自然一直閃退,因為壓根沒內容。

5.寫代碼的時候應當有個良好的習慣,用什麼函數導什麼函數,不要上來import整個庫,最後你會發現你一個100KB的代碼打包出來有500MB,全是庫,簡直無語

6.pygame代碼調試的時候要用quit()不然程序結束時會崩潰。但是直接運行py文件就不需要這個函數。這個我們之前的文章也提到過瞭。但是這裡當我使用-w做成無窗口的程序後,一結束發現報錯,暫停後發現報的是找不到quit()函數。可見這個函數其實是一個很讓人無語的函數。一方面pygame官方網上說結束程序的時候需要加入這個函數。另一方面其實在正在運行時都不需要甚至會報錯。雖然也不影響運行,但是彈個窗口出來說 什麼不fail to execute總是讓別人覺得你是個lowb。所以,調試的時候加一下,到時候execute的時候去掉。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: