如何將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ù)可自行查閱
小結如下:
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不同)