python打包成exe

如何將py程序打包成exe

py打包成exe如何打的足夠小

Python腳本不能在沒有安裝Python的機器上運行,如果我們想把自己的腳本分享給沒有python環(huán)境的小伙伴使用,這個時候就需要將腳本打包成exe文件,即使使用方電腦沒有安裝python解釋器,這個exe也能在上面運行。

一、常規(guī)打包

1、安裝Pyinstaller

pip install PyInstaller

用pip管理工具安裝庫文件時,默認使用國外的源文件,因此在國內(nèi)的下載速度會比較慢。幸好,國內(nèi)的一些頂級科研機構已經(jīng)給我們準備好了各種鏡像。
其中,比較常用的國內(nèi)鏡像包括:
(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣http://pypi.douban.com/simple/
(3)清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/
(5)華中科技大學http://pypi.hustunique.com/
可以在使用pip的時候,加上參數(shù)-i和鏡像地址

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

2、Pyinstaller打包步驟

1、Windows+R鍵輸入cmd切換到我們放文件的目錄
2、執(zhí)行命令Pyinstaller -F -w -i picture.ico xxx.py.執(zhí)行完畢會發(fā)現(xiàn)當前目錄多了幾個文件夾,打開其中名為dist的文件夾.已經(jīng)生成了一個名為xxx的exe應用程序,并且圖標也是我們設置的picture圖案,看來已經(jīng)成功一半了.

3、Pyinstaller參數(shù)詳解

-F參數(shù)代表制作獨立的可執(zhí)行程序
-w是指程序啟動的時候不會打開命令行。如果不加-w的參數(shù),就會有黑洞洞的控制臺窗口出來。此外,-w參數(shù)在GUI界面時非常有用。
-i picture.ico就是指設置自己的圖標圖案,因為默認打包圖片是下圖這樣的。這個參數(shù)也可以寫成--icon=prcture.ico
這幾個常用參數(shù)就說完了,其他參數(shù)可自行查閱

image-20210114225235577.png

小結如下:

yinstaller -F py_word.py  # 打包exe

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

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

4、ico圖片生成

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

一個是可以找專門的ico圖片網(wǎng)站,如:阿里巴巴矢量圖。

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

二、壓縮打包

假如生成的exe太大,怎么轉換的小一點,我們試過一些方法。比如:pipenv 虛擬環(huán)境、使用開源的upx壓縮等等,但是往往要么過程比較麻煩,要么成功率不高(壓縮成不成功看心情)。
總結一下最簡單且成功率極高的方法——conda創(chuàng)建虛擬環(huán)境。

1、Python打包為什么大?

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

Python打包exe,不但體積大而且運行慢。解釋型語言相對較慢。要解決大而慢,只能用編譯型語言,如C,C++,甚至VB都好很多,體積最小的是匯編。

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

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

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

2、虛擬環(huán)境

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

Anaconda環(huán)境使用如下:

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

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

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

conda remove -n env_name--all  # 刪除虛擬環(huán)境

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

conda安裝的虛擬環(huán)境,會把虛擬環(huán)境的目錄生成在anaconda安裝目錄下的env目錄下.

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

3、安裝所需的庫

輸入conda list可以查看當前虛擬環(huán)境里已經(jīng)安裝的庫。

如果我們打包的腳本需要安裝額外的庫,安裝方式同上安裝Pyinstaller操作

安裝好之后可以查看,安裝過程中會有依賴的庫,就不需要管了。

4、Pyinstaller打包步驟

操作同上面常規(guī)打包

小結如下

虛擬環(huán)境+打包的全過程(3步)
#創(chuàng)建虛擬環(huán)境
conda create -n env_name python=3.6

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

#Pyinstaller打包
Pyinstaller -F -w -i picture.ico xxx.py

總結一點注意事項

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

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

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

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

  • 該打包方式不支持跨平臺(類似于軟件Windows和Linux不同)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。