python利用pyinstaller打包文件
首先在命令行下載pyinstaller包
pip install pyinstaller下載完成以后對(duì)應(yīng)工程進(jìn)行打包即可,步驟如下
1.想要對(duì)哪個(gè)工程打包,右鍵如圖所示進(jìn)行操作。
2.在命令框中輸入以下代碼。
????????pyinstaller -F 工程名.py? ? ? ? 參數(shù)F表示覆蓋打包,這樣打包時(shí),不管我們打包幾次,都是最新的,而且它是集成一個(gè)exe文件,不適合調(diào)試
????????pyinstaller - D -c 工程名.py? ? ? ?參數(shù)D 生成一個(gè)目錄,各種依賴庫(kù),資源和exe都在目錄下,參數(shù)c則顯示命令行窗口,如果不想顯示則需-w,一般情況下默認(rèn)-c。
? ? ? ? 還有就是改變圖標(biāo)? 代碼為? pyinstaller -D -i ***.ico 工程名,參數(shù)-i 設(shè)定程序圖標(biāo) ,其后面的xxx.ico文件就是程序小圖標(biāo),這里注意一下,小圖標(biāo)的圖片需放在當(dāng)前目錄下,后綴名改成.ico即可,代碼實(shí)現(xiàn)如下
pyinstaller -F -w -i ./圖片名.ico 工程名.py? ? ? ? 以上幾個(gè)就是常用的,足夠滿足需求了
在上圖中輸入以上代碼即可打包
3.pyinstaller打包常見問題
????????1. 路徑最好為英文,沒有中文字符;
2. 腳本名稱里沒有特殊字符
3. 使用utf-8編碼
4. 圖標(biāo)文件必須是正常格式,為.ico文件
5. 命令使用pyinstaller和pyinstaller.exe結(jié)果都是一樣的
6. 參數(shù)的添加得在pyinstaller和dev.py文件中間,不能隨意位置添加
7. 如果你打包的代碼中用到了靜態(tài)文件,如圖片和資源文件,需手動(dòng)復(fù)制到文件夾中,否則exe文件會(huì)報(bào)找不到文件的錯(cuò)
8. 代碼里導(dǎo)包最好使用from的方式,可節(jié)省打包后的文件大小
9. 就是當(dāng)你使用錯(cuò)誤的參數(shù)去打包或者打包到一半中斷,等等此類運(yùn)行到一半沒了的情況。會(huì)導(dǎo)致你原來(lái)的py文件變成一個(gè)0KB的空文件。里面的代碼會(huì)全部消失!!!所以以后需要有個(gè)良好的習(xí)慣,就是復(fù)制一份代碼出來(lái),用這個(gè)副本進(jìn)行打包。并且參數(shù)出錯(cuò),或者打錯(cuò)了導(dǎo)致失敗時(shí),檢查下副本文件的py文件是否還存在再繼續(xù)重新打包,不然打出來(lái)的就是空的文件,自然一直閃退,因?yàn)閴焊鶝]內(nèi)容(這點(diǎn)我沒遇到過(guò),來(lái)自別人的提醒)
10. pygame代碼調(diào)試的時(shí)候要在結(jié)束時(shí)加quit()不然程序會(huì)崩潰
11. py文件運(yùn)行沒問題,不代表你打包后的文件運(yùn)行就沒問題,所以在打包好文件,打算運(yùn)行exe文件測(cè)試時(shí)一定要錄屏,因?yàn)閳?bào)錯(cuò)會(huì)一閃而逝然后程序關(guān)閉,不仔細(xì)看的話,發(fā)現(xiàn)不了還報(bào)錯(cuò),只會(huì)認(rèn)為程序一運(yùn)行就閃退,會(huì)讓人不明所以,都不知道為什么,只有清楚報(bào)的什么錯(cuò)才好去解決,所以,一定要錄屏!!!!
12. 如果在py文件中用到了多進(jìn)程,且你在Windows下編譯需要加一行代碼在開頭,multiprocessing.freeze_support()?
13. 打包的時(shí)候要進(jìn)入到能運(yùn)行這個(gè)py文件的虛擬環(huán)境中,不能在別的環(huán)境中對(duì)py文件打包,不然打包的結(jié)果還是你原來(lái)的環(huán)境,可能打包文件過(guò)大,或者引起缺失包等其他問題
14. 如果有打包錯(cuò)誤,具體看build里的warn***.txt文檔,里面詳細(xì)記載了錯(cuò)誤的原因。一般都是庫(kù)丟失
?
總結(jié)
以上是生活随笔為你收集整理的python利用pyinstaller打包文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins生成APP二维码下载链接
- 下一篇: 测试功放HT8692HT8299s