1. 程式人生 > >【tkinter】python工具pyinstaller打包生成exe檔案非常大的原因分析(openpyxl)openpyxl

【tkinter】python工具pyinstaller打包生成exe檔案非常大的原因分析(openpyxl)openpyxl

【python】python的打包工具pyinstaller生成exe非常大的原因分析(openpyxl)openpyxl

 -F 打包出來 一個一個都有200多m

from tkinter import *
from tkinter.font import Font
from email.mime.text import MIMEText
from email.header import Header
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
import tkinter.filedialog
import openpyxl
import smtplib
import threading

print(3*2)

每次刪掉一行,打包一個一個個包進行測試。發現有的包打出來沒什麼影響。


發現有一個包異常,只要有這個包,就是特別大---openpyxl


打包時間也特別長


檢查日誌:發現openpyxl  與 pandas numpy有關。

單獨將程式碼提出,用兩種方法呼叫,發現沒什麼卵用。

from openpyxl import load_workbook

#import openpyxl

workbook = openpyxl.load_workbook('data.xlsx')

都還是200多m

PyInstaller very big file size

win7(64bit)  

anaconda ( 3 )

python(3.6) 

pyinstaller (3.4.dev0+469f1fa19)

openpyxl (2.4.8)  


I've made simple code like this:
------code------------------------------------------
#import openpyxl
workbook = openpyxl.load_workbook('data.xlsx')
------code------------------------------------------

 File size (python files) is 1.0 KB.
 But when I create executable using PyInstaller, I get 200 MB file!
 About openpyxl..... Why the generated files are so big?

 Is there a way to decrease file size?

在網上問了外國人,建議說是要安裝一個 python的虛擬機器器,因為我們安裝的是Anaconda,裡面很多庫連線進去了很多不必要的其他庫和包

有道理!

所以,乾脆用一臺筆記本,安裝純python3.6的環境。並單獨把openpyxl 單獨下下來,到時候有用。


裝好後,繼續用pip 把 pypiwin32 裝好。這裡有個坑:

要用 pip install pypiwin32,  而不是     pip install pywin32.

裝好後,按照一個不知名的方法,建議把這個 openxyl 解壓到pyinstall 的根目錄。等下要用。(好像有用)

然後把我的 py檔案要打包的。也放到 pyinstaller 根目錄。

pyinstaller -F mainGUIversion5.py      打包開始。

打包好後,發現竟然打包完成。 但是執行不了

直接到cmd視窗去執行,發現有少包,見下圖,缺什麼用pip裝什麼,這樣做,儘量不汙染python原生環境。

Need  pure  python environment!!!

No Anaconda

例如,這個是少了 jdcal包:


一次一次打包,一次次執行發現少包。


最後發現,ok了!!!!  最後一次打包為 不到8m了。  從200M直接壓縮到了 8M,任務完成。


執行也正常!


第二天開始做一個實驗:

看到底是包的問題,還是python 的問題,先將openpyxl包從pyinstaller目錄剪切出去,直接放到桌面,不刪掉:


執行後,發現打包可以,但是程式執行錯誤,提示“缺少openpyxl”。。錯誤找到了


於是  ,開始pip 安裝包。安裝後再執行打包。成功!


打包成功!

這麼多步驟與嘗試下來。得出結論。pyinstaller的正確打包有兩種方法:

第一種方法:將需要打包的程式和其所有依賴的包,統一放在pyinstaller的根目錄下,直接用-F打包即可成功,少一個包都不行!

第二種方法:安裝一個純淨的python環境,然後一步步測試pip,少哪個包就直接安裝哪個。

兩種方法各有千秋,但是推薦使用第二種方法,因為這種方法相對簡便,特別是在不清楚包之間的依賴關係的情況下。