別再問我怎麼Python打包成exe了

2021-02-19 Python編程時光

點擊上方「Python編程時光」,選擇「加為星標」


大家好,我是明哥。

一直有讀者在後臺問有關Python腳本打包成exe的問題。今天就推薦給大家一篇文章,全面總結一下:Python如何打包成exe,以及如何打得足夠小。

標準打包

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

為什麼要打包?

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

那我們如果寫了一個數據分析/自動化辦公的小腳本,想分享給同事小姐姐使用,可她電腦又沒有裝Python。

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

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

安裝Pyinstaller

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

pip install pyinstaller 

如果網速太慢可以切換國內源來加速,本文其他部分直接使用國內源,不再重複注釋。

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

Pyinstaller打包步驟

這裡我們拿之前《Python自動化辦公 | 同事要我幫忙補寫178份Word日報!》這篇的python代碼,作為案例來演示。將其中腳本py_word.py,待處理的表格文件workbook.xlsx,以及準備好的軟體圖標圖片chengzi.ico放在了我電腦的F:\py_word目錄下(如果大家感興趣的話,可以在文末下載獲取)

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

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

執行完畢會發現當前目錄多了幾個文件夾,打開其中名為dist的文件夾。

已經生成了一個名為py_word的exe應用程式,並且圖標也是我們設置的橙子圖案,看來已經成功一半了。

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

打包exe後執行

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

Pyinstaller參數詳解

說回剛剛執行的命令

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

給大家解釋一下其中Pyinstaller的參數,其中-F參數代表製作獨立的可執行程序。

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

最後的-i chengzi.ico就是指設置自己的圖標圖案,因為默認打包圖片是下圖這樣的。這個參數也可以寫成--icon=chengzi.ico

最後稍微總結一下:

Pyinstaller -F py_word.py 打包exe

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

Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe圖標打包

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

Pyinstaller參數大全

ico圖片生成

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

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

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

ico圖片格式轉換壓縮打包

好了,小夥伴們

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

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

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

Python打包為什麼大?

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

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

此外,還有知乎大佬說是因為「Anaconda裡內置了很多庫,打包的時候打包了很多不必要的模塊進去,要用純淨的Python來打包。」

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

那最適合的就是——虛擬環境了!

虛擬環境

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

先記幾個命令,很簡單

conda create -n 虛擬環境名字 python==3.6  #創建虛擬環境

conda activate 虛擬環境名字  #激活虛擬環境

conda deactivate  #退出虛擬環境

從開始菜單運行「Anaconda Prompt」,出現的界面輸入創建虛擬環境的指令。成功創建了一個名字為aotu,且基於python版本3.6的虛擬環境。

在創建過程中需要回復(y/n),Yes,再激活虛擬環境

conda安裝的虛擬環境,會把虛擬環境的目錄生成在anaconda安裝目錄下的env目錄下。

當然我們也可以在剛剛的窗口,使用命令conda info --envs,來查看conda環境下所有的虛擬環境

安裝所需的庫

上面我們已經創建並激活了名為aotu虛擬環境,輸入conda list可以查看當前虛擬環境裡已經安裝的庫。

我們打開所要打包的Python腳本,對比上圖,發現pandas,docx這兩個庫還需要額外安裝。當然,也不能缺了打包必不可少的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打包步驟

這裡就不再重複了,只換個蘋果圖標試試

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

生成

成功壓縮到29.8M,如果不導入pandas這位大神,應該就可以10多M了

運行一下,毫無問題

最後再簡單總結一下虛擬環境+打包的全過程(只三步):

#創建虛擬環境
conda create -n aotu python=3.6

#激活虛擬環境
conda activate aotu

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

總結一些小坑

1、說起來還是有點玄學,上文中一模一樣的過程我在兩個電腦都執行過一遍。在其中一個上顯示缺少xlrd這個庫,安裝後成功打包,也是一樣的大小。小夥伴們可以在文末獲取文件,也試試。

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

pip install python-docx

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

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

4、最後,如果想要刪除虛擬環境的話,可執行下方命令

conda remove -n aotu--all 

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

下載連結

如果大家想測試Python打包,手頭又沒有合適的文件,可以在「Python編程時光」後臺回復「打包」即可獲得以下文件:

參考資料[1]

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

[2]

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

相關焦點

  • 別再問我怎麼Python打包成exe了!
    所以,從看了這個教程以後,這都將成為過去式,打成exe之後,分享即可用。PS: 如果打包為exe的話,版本儘量選擇python3.6+32位版本,因為win64位系統向下兼容32位程序,但是如果不考慮32位系統的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統上跑。
  • 別再問我Python打包成exe了!(終極版)
    大家好,我是小五🐶Py程序打包成exe文件很多同學都會,但是很多人打包完發現:一個簡單的Py程序打包成exe文件之後編程幾百兆了,今天將帶大家學習如何將python腳本打包成10多M的?那今天小五就給大家全面總結一下:Python如何打包成exe,以及如何打得足夠小。
  • py2exe:輕鬆將 Python 程序打包成 exe
    上回在《如何將 Python 程序打包成 .exe  文件?》
  • 如何將 Python 程序打包成 .exe 文件?
    有不少訂閱本公眾號的朋友都不是玩 Python 的,甚至都不是計算機相關專業的,當我給他們一個 Python 程序時,他們是完全不知道該怎麼運行的
  • 【python學習第七篇】Python 程序打包成 exe 可執行文件
    比較麻煩的是需要針對不同平臺需要打包不同的可執行文件(Windows, Linux, Mac,…)。.py 和.pyc 都比較簡單,Python 本身就可以搞定。將 Python 腳本打包成可執行文件有多種方式。
  • python將.py文件打包成.exe可執行文件
    網上介紹的將python文件打包成exe文件的模塊主要有三個:py2exe,pyinstaller,cxfreeze三種。
  • Python打包利器:auto-py-to-exe
    什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。
  • 可視化 Python 打包 exe,這個神器絕了!
    大家好,我是Python人工智慧技術# 1. 什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。
  • Python文件打包成exe可執行程序
    背景 有時寫的Python程序需要交給業務人員使用,但業務人員電腦上基本都沒有安裝Python,並且業務人員也不會使用命令行,所以就需要把Python程序打包成
  • 三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe
    /3 pyinstaller打包機制/  我們寫的python腳本是不能脫離python解釋器單獨運行的,所以在打包的時候,至少會將python解釋器和腳本一起打包,同樣,為了打包的exe能正常運行,會把我們所有安裝的第三方包一併打包到exe。
  • Python安裝擴展庫與打包成exe可執行文件的方法
    程序打包成exe程序之後可以在沒有安裝Python解釋環境的Windows平臺上運行。Python程序打包常用的是py2exe工具,假設有Python程序文件CheckAndViewAutoRunsInSystem.py,現在編寫setup.py文件,內容為:import distutilsimport py2exedistutils.core.setup(console=['CheckAndViewAutoRunsInSystem.py
  • 為了產品經理(老師),我把程序打包成了exe可執行文件!
    我總不能在老師電腦上安裝Python,讓老師自己去運行.py文件吧!老師想要的是雙擊就能運行的小工具。那麼,怎麼才能把我們寫好的Python文件轉化為exe可執行文件呢?藉助這個機會,我學習了一下pyinstaller打包文件的模塊。
  • Python打包生成EXE可執行程序方法
    因此,就需要打包成獨立可運行的EXE程序。研究這個有一段時間了,因為我用的最新版本的Python 3.6(最近聽說Python 3.7都要出來了,更新換代太快了),傳統的幾種方法打包都失敗,請教了一些高手,包括大神,結果都不行,建議換成Python 2.7再打包。最近找到一個辦法,利用Pyinstaller類庫就可以給Python原始碼打包:
  • Python實現貪吃蛇小遊戲!!pyinstaller打包成exe!
    pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com利用python的pygame第三方庫和面向對象編程的方法,實現簡單的貪吃蛇小遊戲,還可用pyinstaller打包成exe,方便自己想玩的時候直接點開或者分享給別人
  • Python文件打包成exe很簡單,如果安卓手機也能運行的軟體你會嗎
    前言我相信很多小夥伴都知道怎麼將Python的文件打包成exe,而且這個也非常的簡單,一行代碼就能輕鬆搞定:pyinstaller -F xxx.py但是如果我們用Python開發一個小遊戲或者一個GUI桌面應用小程序,想在手機上面運行試玩那應該怎麼做呢?
  • 想把 python 代碼打包為 exe 程序?只要這簡單三步就能搞定啦~
    最近有部分小夥伴問我,python 寫的項目可不可以打包成 exe 程序,放到沒有 python 環境上的電腦中執行?答案當然是可以的。python 有一個叫做 pyinstaller 的第三方庫,是專門用來將 python 程序打包 exe 程序的。今天就專門給大家分享一下如何進行打包,使用之前需要大家先使用 pip 進行安裝。
  • Python打包工具--Pyinstaller詳細介紹
    前幾篇寫了一些將python代碼打包成exe工具的文章,很多朋友私下問我,是通過什麼工具操作的
  • python 生成exe文件
    # -F -D互斥參數-F  打包成一個exe文件,小項目可以採用,打開比較慢,多個.py打包時不能使用-D  默認參數,打包結果放入到創建的文件夾中,可以看到裡面有很多的依賴文件# -w -c互斥參數-w  使用項目的GUI界面,無cmd控制臺-c  默認參數,使用cmd控制臺 如果打包文件執行報錯,可嘗試用-c 顯示控制臺-n  執行項目的名稱,默認.py的文件名-i  將ico圖標打包到exe文件中--hidden-import 打包時導包信息# 打包PyQt項目強烈建議
  • 如何將 Python 程序打包成exe文件?
    安裝遇到問題,看以下三篇文章嘗試解決Tips | 如何快速地關閉代理Python日記第2篇-Python中pip如何改安裝源Tips | 怎麼解決就先輸入d:再輸入cd 文件夾名字(具體我的文件夾就是寫cd ttt)
  • 用python打包exe應用程式-PyInstaller
    PyInstaller 製作出來的執行文件並不是跨平臺的,如果需要為不同平臺打包,就要在相應平臺上運行PyInstaller進行打包。2、PyInstaller安裝有時候會安裝失敗?準備需要的文件我們的tree文件夾放在c盤的fac.ico 程序的圖標tree.py 是python文件4.使用Pyinstaller使用默認Pyinstaller打包方式打開cmd窗口,把路徑切換到當前路徑打開命令提示行