新聞中心
寫(xiě)完一個(gè)python程序之后,如何才能快速地將代碼分享給別人,尤其對(duì)于初學(xué)者來(lái)說(shuō),能把自己的代碼包裝成一個(gè)exe程序并傳遞到別人電腦上運(yùn)行,那是一件非常有成就感的事。好在python自帶簡(jiǎn)易打包程序,讓很多人能過(guò)一把當(dāng)程序員的癮。目前流行的打包庫(kù)就有py2exe、pyinstaller和cx_Freeze。

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),包括網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營(yíng)銷(xiāo)策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營(yíng)銷(xiāo)等。創(chuàng)新互聯(lián)公司為不同類(lèi)型的客戶(hù)提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)公司核心團(tuán)隊(duì)十年專(zhuān)注互聯(lián)網(wǎng)開(kāi)發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶(hù)提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹(shù)立了良好口碑。
但python的運(yùn)行環(huán)境復(fù)雜,編寫(xiě)的程序往往是借助了很多附加的功能庫(kù)來(lái)實(shí)現(xiàn),對(duì)簡(jiǎn)單的打包會(huì)造成一定困難。本人也是在經(jīng)歷了多次的打包失敗和成功的經(jīng)歷之后,覺(jué)得pyinstaller的成功率最高,所以有必要針對(duì)pyinstaller寫(xiě)一篇避坑指南。
一、安裝
使用python的pip安裝,在cmd窗口,使用pip install pyinstaller,即安裝完成。然后配置好環(huán)境變量。
二、使用
例如在程序6.py所在文件夾打開(kāi)cmd窗口。一般輸入pyintaller -F **.py(命令符的具體含義在下文中解釋?zhuān)剀?chē)即開(kāi)始打包。順利的話(huà),會(huì)出現(xiàn)打包成功的反饋,如下圖,這時(shí),就說(shuō)明文件已經(jīng)打包完成了。dist文件夾里面就放著打包完的exe程序,使用時(shí)剪切出來(lái)就行了。如果運(yùn)氣好或者本身程序比較簡(jiǎn)單,那這個(gè)exe就能在任何電腦運(yùn)行了。
但往往沒(méi)這么容易,pyinstaller在使用中有很多坑,打包的開(kāi)始,也是修補(bǔ)的開(kāi)始。
三、遇坑填坑
1.文件路徑中不能出現(xiàn)中文
否則會(huì)在打包過(guò)程中直接出現(xiàn)如下報(bào)錯(cuò)。這時(shí)只要把所在文件夾和程序名字改成英文或者數(shù)字重新打包即可??梢源虬暝賹xe的名字改回來(lái)。
2.缺少導(dǎo)入hook文件
有時(shí)即使打包成功了,在運(yùn)行exe時(shí)候,還是會(huì)有報(bào)錯(cuò)并閃退。
如果報(bào)錯(cuò)為:FileNotFoundError: [Errno 2] No such file or directory:……
那是缺少hook文件,要在pyinstaller的安裝路徑里的hook增加一個(gè)自定義的hook。hook文件的命名規(guī)范為: hook-【庫(kù)名】.py。例如以我在打包程序中用了結(jié)巴分詞這個(gè)功能庫(kù)為例,那我要建立一個(gè)hook-jieba.py,并寫(xiě)入:
- from PyInstaller.utils.hooks import collect_data_files
- datas = collect_data_files("jieba")
然后放到~\Lib\site-packages\PyInstaller\hooks中去,再次運(yùn)行pyinstaller打包既可解決該問(wèn)題。
3.缺少導(dǎo)入功能庫(kù)模塊
如果報(bào)錯(cuò)為 no moduler named “pandas._libs.skiplist”,那就要手動(dòng)import庫(kù),解決方法打開(kāi)生成的spec文件,找到 hiddenimports=[],加上要添加的庫(kù),將其改動(dòng)如下,hiddenimports=["pandas._libs.skiplist"],然后刪除dist里面的exe文件,重新用spec文件打包,pyinstaller **.spec。即可解決該問(wèn)題。
四、花式打包
涉及到打包的幾個(gè)重要參數(shù)如下。
- -F,將所有內(nèi)容打包到一個(gè)exe中,方便發(fā)送,一般都使用這個(gè)參數(shù)。
- -c,此為windows系統(tǒng)的默認(rèn)選項(xiàng),使用這個(gè)參數(shù),運(yùn)行時(shí)會(huì)有一個(gè)黑窗控制臺(tái)。
- -w,使用這個(gè)參數(shù),運(yùn)行時(shí)不會(huì)出現(xiàn)黑窗控制臺(tái)。
- -i 使用這個(gè)參數(shù)用于生成自定義圖標(biāo)的exe,在這后面要加上ico圖片的地址。例如,pyinstaller -i D:\icons\demo.ico **.py
五、結(jié)語(yǔ)
將程序打包成exe發(fā)送出去或者供用戶(hù)下載,是一個(gè)比較傳統(tǒng)的傳播方式,并且比較笨重,其實(shí)用簡(jiǎn)單的H5或者小程序就能實(shí)現(xiàn)一樣的效果,對(duì)用戶(hù)而言也更方便,也是朝著輕應(yīng)用的方向發(fā)展。此外,對(duì)于專(zhuān)業(yè)用戶(hù)還能通過(guò)github和api等方式傳播。隨著網(wǎng)絡(luò)觀(guān)念的深入人心和5G時(shí)代到來(lái),相信有更好的方式能更安全、快捷、私密地將工具的功能傳遞給所需要的用戶(hù)。
新聞標(biāo)題:Python打包exe程序避坑指南
新聞來(lái)源:http://www.fisionsoft.com.cn/article/cdiohed.html


咨詢(xún)
建站咨詢(xún)
