<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4197字,需瀏覽 9分鐘

           ·

          2021-01-17 10:01

          很多小伙伴費(fèi)了九牛二虎之力,終于寫好了Python程序,想分享給其他的童鞋用,但是一堆依賴包太麻煩了,怎么破?今天跟大家分享一下如何Python如何打包成exe,以及如何打得足夠小。

          標(biāo)準(zhǔn)打包

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

          為什么要打包?

          眾所周知,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)我沒說)

          安裝Pyinstaller

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

          pip?install?pyinstaller?

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

          pip?install?-i?https://pypi.douban.com/simple/?pyinstaller?#豆瓣源
          pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?pyinstaller?#清華源

          Pyinstaller打包步驟

          這里我們拿之前《Python自動(dòng)化辦公 | 同事要我?guī)兔ρa(bǔ)寫178份Word日報(bào)!》這篇的python代碼,作為案例來演示。將其中腳本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)

          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ì)有黑洞洞的控制臺窗口出來。比如在剛才的腳本里我加一行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é)一下:

          Pyinstaller?-F?py_word.py?打包exe

          Pyinstaller?-F?-w?py_word.py?不帶控制臺的打包

          Pyinstaller?-F?-w?-i?chengzi.ico?py_word.py?打包指定exe圖標(biāo)打包

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

          Pyinstaller參數(shù)大全

          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)境。

          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)境了!

          虛擬環(huán)境

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

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

          conda?create?-n?虛擬環(huán)境名字?python==3.6??#創(chuàng)建虛擬環(huán)境

          conda?activate?虛擬環(huán)境名字??#激活虛擬環(huán)境

          conda?deactivate??#退出虛擬環(huán)境

          從開始菜單運(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)境

          安裝所需的庫

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

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

          待打包腳本

          安裝庫的過程不再贅述

          pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?pandas

          pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?python-docx

          pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?pyinstaller

          安裝后再看

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

          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)境+打包的全過程(只三步):

          #創(chuàng)建虛擬環(huán)境
          conda?create?-n?aotu?python=3.6

          #激活虛擬環(huán)境
          conda?activate?aotu

          #Pyinstaller打包
          Pyinstaller?-F?-w?-i?apple.ico?py_word.py

          總結(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)上跑。[2]

          下載鏈接

          如果大家想測試Python打包,手頭又沒有合適的文件,可以在「凹凸數(shù)據(jù)」后臺回復(fù)“打包”即可獲得以下文件:

          參考資料

          [1]

          弗拉基米爾: https://www.zhihu.com/question/281858271/answer/613147412

          [2]

          別再問我怎么Python打包成exe了!》: https://mp.weixin.qq.com/s/zilDeFunWLG0mBS_x0vNnA






          菜鳥編程大本營,已經(jīng)正式上線

          專注于分享趣味的編程技巧,不限于Java, Python ,Go, Javascript等語言,讓菜鳥愛上編程,進(jìn)階成為高手,歡迎關(guān)注。



          菜鳥編程本營,從菜鳥進(jìn)階高手


          爆款文案


          點(diǎn)這里,獲取新手福利

          瀏覽 28
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人伊人伊人伊人伊人 | 日本逼视频 | 六月丁香九月婷婷 | 深夜福利 性色av | 乱伦免费小说黄色电影 |