別再問我Python怎么打包成exe了!(終極版)

大家好虚婿、Py程序打包成exe文件很多同學(xué)都會(huì)襟企,但是很多人打包完發(fā)現(xiàn):一個(gè)簡單的Py程序打包成exe文件之后編程幾百兆了挨稿,今天將帶大家學(xué)習(xí)如何將python腳本打包成10多M的速址?

那今天就給大家全面總結(jié)一下:Python如何打包成exe辕棚,以及如何打得足夠小奴曙。

一别凹、標(biāo)準(zhǔn)打包

目前比較常見的打包exe方法都是通過Pyinstaller來實(shí)現(xiàn)的,本文也將使用這種常規(guī)方法洽糟。如果對這塊已經(jīng)很熟悉的小伙伴炉菲,可以直接下滑到本文下半部分。

1坤溃、為什么要打包拍霜?

眾所周知,Python腳本不能在沒有安裝Python的機(jī)器上運(yùn)行薪介。

那我們?nèi)绻麑懥艘粋€(gè)數(shù)據(jù)分析/自動(dòng)化辦公的小腳本祠饺,想分享給同事小姐姐使用,可她電腦又沒有裝Python汁政。

這個(gè)時(shí)候如果將腳本打包成exe文件道偷,微信發(fā)送給她缀旁,即使她的電腦上沒有安裝Python解釋器,這個(gè)exe程序也能在上面運(yùn)行试疙。豈不美哉诵棵?

編輯

(當(dāng)然,想通過幫安裝Python跟小姐姐建立感情的話祝旷,就當(dāng)我沒說)

2履澳、安裝Pyinstaller

首先我們要先安裝Pyinstaller,直接在cmd使用pip命令

pip install pyinstaller

如果網(wǎng)速太慢可以切換國內(nèi)源來加速怀跛,本文其他部分直接使用國內(nèi)源距贷,不再重復(fù)注釋。

3吻谋、Pyinstaller打包步驟

這里我們拿之前Python自動(dòng)批量寫Word日報(bào)的代碼忠蝗,作為案例來演示。將其中腳本py_word.py漓拾,待處理的表格文件workbook.xlsx阁最,以及準(zhǔn)備好的軟件圖標(biāo)圖片chengzi.ico放在了我電腦的F:\py_word目錄下(如果大家感興趣的話,可以在文末下載獲群Я健)

1速种、cmd切換到我們剛剛放文件的目錄

2、執(zhí)行命令Pyinstaller -F -w -i chengzi.ico py_word.py低千,執(zhí)行過程特別漫長配阵,就沒有錄制動(dòng)圖。

執(zhí)行完畢會(huì)發(fā)現(xiàn)當(dāng)前目錄多了幾個(gè)文件夾示血,打開其中名為dist的文件夾棋傍。

已經(jīng)生成了一個(gè)名為py_word的exe應(yīng)用程序,并且圖標(biāo)也是我們設(shè)置的橙子圖案难审,看來已經(jīng)成功一半了瘫拣。

要不運(yùn)行一下,試試能否正常生成word日報(bào)告喊?

打包exe后執(zhí)行

成功運(yùn)行拂铡,可惜就是文件有點(diǎn)大(339M)

4、Pyinstaller參數(shù)詳解

說回剛剛執(zhí)行的命令

Pyinstaller -F -w -i chengzi.ico py_word.py

給大家解釋一下其中Pyinstaller的參數(shù)葱绒,其中-F參數(shù)代表制作獨(dú)立的可執(zhí)行程序。

-w是指程序啟動(dòng)的時(shí)候不會(huì)打開命令行斗锭。如果不加-w的參數(shù)地淀,就會(huì)有黑洞洞的控制臺(tái)窗口出來。比如在剛才的腳本里我加一行print('Hello World!')岖是,那么就不要放-w參數(shù)了帮毁,不然運(yùn)行會(huì)報(bào)錯(cuò)实苞,畢竟Hello World!需要在命令行里打印出來。此外烈疚,-w參數(shù)在GUI界面時(shí)非常有用黔牵。

最后的-i chengzi.ico就是指設(shè)置自己的圖標(biāo)圖案,因?yàn)槟J(rèn)打包圖片是下圖這樣的爷肝。這個(gè)參數(shù)也可以寫成--icon=chengzi.ico

最后稍微總結(jié)一下:


以上三個(gè)是比較常用的參數(shù)猾浦,其他參數(shù)詳見下表

Pyinstaller參數(shù)大全

5、ico圖片生成

自己做的軟件都喜歡放上自己的圖標(biāo)灯抛,不過哪來那么多ico圖片呢金赦?

一個(gè)是可以找專門的ico圖片網(wǎng)站,不過都很小眾对嚼,圖片庫也很小夹抗。

另一個(gè)是可以自己生成,這里就給大家分享一個(gè)網(wǎng)站纵竖,可以把其他格式圖片轉(zhuǎn)成ico格式:

https://app.xunjiepdf.com/img2icon/


ico圖片格式轉(zhuǎn)換

二漠烧、壓縮打包

好了,小伙伴們

來到了最激動(dòng)人心的時(shí)刻靡砌,剛剛生成的exe實(shí)在太大了已脓,300多M的軟件程序想用微信傳一下都費(fèi)勁。

我也試過很多方法乏奥,比如:修改spec文件自定義打包摆舟、pipenv 虛擬環(huán)境、使用開源的upx壓縮等等邓了,但是往往要么過程比較麻煩恨诱,要么成功率不高(壓縮成不成功全看臉)。

而我要分享的骗炉,是自己一直在用的照宝,最簡單且成功率極高的方法——conda創(chuàng)建虛擬環(huán)境。

1句葵、Python打包為什么大厕鹃?

在壓縮打包之前,先簡單說一下為什么Python打包過大乍丈?

Python打包exe剂碴,不但體積大而且運(yùn)行奇慢。解釋型語言大都是這個(gè)樣子轻专,只不過Python尤其突出忆矛。要解決大而慢,只能用編譯型語言,如C催训,C++洽议,甚至VB都好很多,體積最小的是匯編漫拭。[1]

此外亚兄,還有知乎大佬說是因?yàn)椤癆naconda里內(nèi)置了很多庫,打包的時(shí)候打包了很多不必要的模塊進(jìn)去采驻,要用純凈的Python來打包审胚。”

所以我們可以模擬一個(gè)新環(huán)境挑宠,其中只安裝我們本次打包所必要的工具包即可菲盾。

那最適合的就是——虛擬環(huán)境了!

2各淀、虛擬環(huán)境

Python創(chuàng)建虛擬環(huán)境的方法有很多懒鉴,而我是個(gè)Anaconda忠實(shí)用戶,如果你跟我一樣碎浇,那就簡單了临谱。(大家也可以使用Virtualenv、Pipenv來設(shè)置虛擬環(huán)境奴璃,善用搜索悉默,方法大同小異)

先記幾個(gè)命令,很簡單

從開始菜單運(yùn)行“Anaconda Prompt”苟穆,出現(xiàn)的界面輸入創(chuàng)建虛擬環(huán)境的指令抄课。成功創(chuàng)建了一個(gè)名字為aotu,且基于python版本3.6的虛擬環(huán)境雳旅。

在創(chuàng)建過程中需要回復(fù)(y/n)跟磨,Yes,再激活虛擬環(huán)境

conda安裝的虛擬環(huán)境攒盈,會(huì)把虛擬環(huán)境的目錄生成在anaconda安裝目錄下的env目錄下抵拘。

當(dāng)然我們也可以在剛剛的窗口,使用命令conda info --envs型豁,來查看conda環(huán)境下所有的虛擬環(huán)境


3僵蛛、安裝所需的庫

上面我們已經(jīng)創(chuàng)建并激活了名為aotu虛擬環(huán)境,輸入conda list可以查看當(dāng)前虛擬環(huán)境里已經(jīng)安裝的庫迎变。


我們打開所要打包的Python腳本充尉,對比上圖,發(fā)現(xiàn)pandas衣形,docx這兩個(gè)庫還需要額外安裝驼侠。當(dāng)然,也不能缺了打包必不可少的pyinstaller庫。

待打包腳本

安裝庫的過程不再贅述

安裝后再看


已成功安裝泪电,還有一些因?yàn)檫@幾個(gè)庫所附帶安裝的,就不管他們了纪铺。

4相速、Pyinstaller打包步驟

這里就不再重復(fù)了,只換個(gè)蘋果圖標(biāo)試試

Pyinstaller -F -w -i apple.ico py_word.py

生成

成功壓縮到29.8M鲜锚,如果不導(dǎo)入pandas這位大神突诬,應(yīng)該就可以10多M了

運(yùn)行一下,毫無問題

最后再簡單總結(jié)一下虛擬環(huán)境+打包的全過程(只三步):

5芜繁、總結(jié)一些小坑

1旺隙、說起來還是有點(diǎn)玄學(xué),上文中一模一樣的過程我在兩個(gè)電腦都執(zhí)行過一遍骏令。在其中一個(gè)上顯示缺少xlrd這個(gè)庫蔬捷,安裝后成功打包,也是一樣的大小榔袋。小伙伴們可以在文末獲取文件周拐,也試試。

2凰兑、在安裝庫是要注意一些庫名妥粟,比如docx這個(gè)庫不要pip install docx,而是需要

pip install python-docx

還有一些庫可能因?yàn)榘姹静煌瑢?dǎo)致不能使用吏够,多碰碰壁就好了勾给。

3、為了防止打包時(shí)候有些庫沒安裝好锅知,可以先在虛擬環(huán)境中執(zhí)行一下Python腳本播急。運(yùn)行無誤的話再打包,比較保險(xiǎn)喉镰。

4旅择、最后,如果想要?jiǎng)h除虛擬環(huán)境的話侣姆,可執(zhí)行下方命令

conda remove -n aotu--all

5生真、打包為exe的話,版本盡量選擇python3.6+32位版本捺宗,因?yàn)閣in64位系統(tǒng)向下兼容32位程序柱蟀,但是如果不考慮32位系統(tǒng)的話無所謂,直接python64位版本直接打包就可以蚜厉,只是只能在win64位系統(tǒng)上跑长已。

6、下載鏈接

如果大家想測試Python打包,手頭又沒有合適的文件术瓮,這里給出文章中的所有文件鏈接:

https://shimo.im/docs/kTRXHYtJVDChyw8Y/?

好了康聂,分享就到了這里了,你xio廢沒有胞四?你還有什么不懂的恬汁,或者有更好的方法歡迎在評論區(qū)討論交流,記得關(guān)注我哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辜伟,一起剝皮案震驚了整個(gè)濱河市氓侧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌导狡,老刑警劉巖约巷,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旱捧,居然都是意外死亡独郎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門廊佩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚聚,“玉大人,你說我怎么就攤上這事标锄⊥缰” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵料皇,是天一觀的道長谓松。 經(jīng)常有香客問我,道長践剂,這世上最難降的妖魔是什么鬼譬? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮逊脯,結(jié)果婚禮上优质,老公的妹妹穿的比我還像新娘。我一直安慰自己军洼,他們只是感情好巩螃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匕争,像睡著了一般避乏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甘桑,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天拍皮,我揣著相機(jī)與錄音歹叮,去河邊找鬼。 笑死铆帽,一個(gè)胖子當(dāng)著我的面吹牛咆耿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爹橱,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼票灰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宅荤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤浸策,失蹤者是張志新(化名)和其女友劉穎冯键,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庸汗,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惫确,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚯舱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片改化。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枉昏,靈堂內(nèi)的尸體忽然破棺而出陈肛,到底是詐尸還是另有隱情,我是刑警寧澤兄裂,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布句旱,位于F島的核電站,受9級特大地震影響晰奖,放射性物質(zhì)發(fā)生泄漏谈撒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一匾南、第九天 我趴在偏房一處隱蔽的房頂上張望啃匿。 院中可真熱鬧,春花似錦蛆楞、人聲如沸溯乒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橙数。三九已至,卻和暖如春帅戒,著一層夾襖步出監(jiān)牢的瞬間灯帮,已是汗流浹背崖技。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钟哥,地道東北人迎献。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像腻贰,于是被迫代替她去往敵國和親吁恍。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容