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

          共 4657字,需瀏覽 10分鐘

           ·

          2021-03-04 17:23

          大家好~之前發(fā)布了一篇文章:5 個無聊透頂?shù)腜ython 程序,之后一直有讀者在后臺問有關(guān)Python腳本打包成exe的問題。今天就推薦給大家一篇文章,全面總結(jié)一下:Python如何打包成exe,以及如何打得足夠小。

          標準打包

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

          為什么要打包?

          眾所周知,Python腳本不能在沒有安裝Python的機器上運行。

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

          這個時候如果將腳本打包成exe文件,微信發(fā)送給她,即使她的電腦上沒有安裝Python解釋器,這個exe程序也能在上面運行。豈不美哉?

          (當(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打包步驟

          1、cmd切換到代碼文件所在目錄如果大家感興趣的話,可以在文末下載獲取案例文件

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

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

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

          要不運行一下,試試能否正常生成word日報?

          打包exe后執(zhí)行

          成功運行,可惜就是文件有點大(339M)

          Pyinstaller參數(shù)詳解

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

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

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

          -w是指程序啟動的時候不會打開命令行。如果不加-w的參數(shù),就會有黑洞洞的控制臺窗口出來。比如在剛才的腳本里我加一行print('Hello World!'),那么就不要放-w參數(shù)了,不然運行會報錯,畢竟Hello World!需要在命令行里打印出來。此外,-w參數(shù)在GUI界面時非常有用。

          最后的-i chengzi.ico就是指設(shè)置自己的圖標圖案,因為默認打包圖片是下圖這樣的。這個參數(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圖標打包

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

          Pyinstaller參數(shù)大全

          ico圖片生成

          自己做的軟件都喜歡放上自己的圖標,不過哪來那么多ico圖片呢?

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

          另一個是可以自己生成,這里就給大家分享一個網(wǎng)站,可以把其他格式圖片轉(zhuǎn)成ico格式:https://app.xunjiepdf.com/img2icon/

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

          壓縮打包

          好了,小伙伴們

          來到了最激動人心的時刻,剛剛生成的exe實在太大了,300多M的軟件程序想用微信傳一下都費勁。

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

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

          Python打包為什么大?

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

          Python打包exe,不但體積大而且運行奇慢。解釋型語言大都是這個樣子,只不過Python尤其突出。要解決大而慢,只能用編譯型語言,如C,C++,甚至VB都好很多,體積最小的是匯編。[1]

          此外,還有知乎大佬說是因為“Anaconda里內(nèi)置了很多庫,打包的時候打包了很多不必要的模塊進去,要用純凈的Python來打包。”

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

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

          虛擬環(huán)境

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

          先記幾個命令,很簡單

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

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

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

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

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

          conda安裝的虛擬環(huán)境,會把虛擬環(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這兩個庫還需要額外安裝。當(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

          安裝后再看

          已成功安裝,還有一些因為這幾個庫所附帶安裝的,就不管他們了。

          Pyinstaller打包步驟

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

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

          生成

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

          運行一下,毫無問題

          最后再簡單總結(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、說起來還是有點玄學(xué),上文中一模一樣的過程我在兩個電腦都執(zhí)行過一遍。在其中一個上顯示缺少xlrd這個庫,安裝后成功打包,也是一樣的大小。小伙伴們可以在文末獲取文件,也試試。

          2、在安裝庫是要注意一些庫名,比如docx這個庫不要pip install docx,而是需要

          pip install python-docx

          還有一些庫可能因為版本不同導(dǎo)致不能使用,多碰碰壁就好了。

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

          4、最后,如果想要刪除虛擬環(huán)境的話,可執(zhí)行下方命令

          conda remove -n aotu--all 

          5、打包為exe的話,版本盡量選擇python3.6+32位版本,因為win64位系統(tǒng)向下兼容32位程序,但是如果不考慮32位系統(tǒng)的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統(tǒng)上跑。[2]

          下載鏈接

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

          參考資料

          [1]

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

          [2]

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


          ············END············

          留言送書

          重磅推薦
           

          推薦理由:

          (1)實戰(zhàn)技能:本書講解了Python編程從入門到精通可能涉及的100個關(guān)鍵技能。

          (2)關(guān)鍵練習(xí):100個關(guān)鍵技能,對應(yīng)100個關(guān)鍵練習(xí),能學(xué)會用。

          (3)重點視頻:重點、難點,都有視頻講解,降低了學(xué)習(xí)難度曲線。


          贈送獎品:

          Python編程寶典:迅速提高編程水平的100個關(guān)鍵技能*4

          活動規(guī)則

          活動截止時我們將從精選留言中選出 四條 走心留言贈送書籍。每人當(dāng)月僅限一次中獎機會

          留言要求:

          • 內(nèi)容與本文相關(guān)的留言

          • 每人僅限精選一條留言


          另外我們每天還會在文末的留言中隨機抽取 3位 小伙伴贈送6.6元的現(xiàn)金紅包,感謝大家一直以來的支持。


          截止時間: 2021 年 3 月 7 日 16:00 整


          昨日留言中獎名單


          恭喜三位中獎的童鞋,快加小編微信(Mayyy530)來領(lǐng)獎吧!



          1、調(diào)試Python代碼,千萬別再用Print了!

          2、史上最全Python 操作 Excel庫總結(jié)!

          3、手機上運行 Python?這款工具比 QPython 還好用


          在看”和“點贊”都是對我們最好的支持 
          瀏覽 128
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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无码成人精品区在线欢看 | 97超碰在线免费观看 | 蜜臀AV午夜 | 亚洲狠狠 | www.精品 |