您的位置:首页 > 编程语言 > Python开发

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

2018-03-20 17:16 1131 查看
【python】python的打包工具pyinstaller生成exe非常大的原因分析(openpyxl)openpyxl
 -F 打包出来 一个一个都有200多mfrom 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的正确打包有两种方法:
第一种方法:将[b]需要打包的程序和其所有依赖的包,统一放在pyinstaller的根目录下,直接用-F打包即可成功,少一个包都不行![/b]
第二种方法:安装一个纯净的python环境,然后一步步测试pip,少哪个包就直接安装哪个。
两种方法各有千秋,但是推荐使用第二种方法,因为这种方法相对简便,特别是在不清楚包之间的依赖关系的情况下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: