解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

最近写一个小脚本,源代码200多行,引入了 openpyxl、requests库,写完打包exe之后居然有64MB的大小,真是奇了葩了。网上查找各位大神的做法,自己又动手填了N个坑之后,总算找到缩小exe文件的方法了,这种方法必须使用到pipenv,详细记录如下:

1、安装pipenv

就像安装其他python库一样,在cmd环境下安装:

pip install pipenv

2、安装完成后,随便找一个盘符,在这个盘符的根目录(最好是根目录)新建一个文件夹,作为虚拟环境,然后双击进入该文件夹

3、进入命令行,按住shift键,鼠标右键点击,在菜单中找到 power shell,点击进入

4、在虚拟环境下安装python,例如:

pipenv install --python 3.6

在这里就有可能遇到第一个坑了,系统有可能提示无法转换为 “utf-8”,具体原因是因为中文转码的问题,但是不必深究。这时候最好的方法是重启电脑,对是的,重启电脑,然后不要打开任何其他程序,重复上述第2步、第3步

5、在命令行下激活虚拟环境

pipenv shell

在这里,可能又会遇到刚刚第4步中的问题,系统提示无法转换为“utf-8”,没有办法,再次重启电脑吧,然后重新进入power shell,再尝试运行 pipenv shell

6、安装需要的库

这时候,根据要打包的程序中导入的库,在pipenv环境下重新安装

pipenv install pyinstaller

pipenv install openpyxl

pipenv install requests

安装过程会比较慢,耐心等候就是了。

7、把py脚本文件复制到这个新建的目录下,重新运行 pyinstaller,方法、参数等同以往一样就OK啦。

最后,在pipenv环境下打包完的程序,就只有6.6MB的大小,虽然对于一个200多行代码的脚本来说,看起来还是有点大,但是相比前一个版本,已经缩小了近1/10,勉强可以接受了。

补充知识: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,少哪个包就直接安装哪个。

两种方法各有千秋,但是推荐使用第二种方法,因为这种方法相对简便,特别是在不清楚包之间的依赖关系的情况下。

以上这篇解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 利用pyinstaller打包exe文件的基本教程

    前言 PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了.PyInstaller支持Python 2.7和Python 3.3+.可以在Windows.Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作:打包成mac app,需要在Mac OS上使用. 方法如下: 1.确保已安装python解释器 2.确认pip是否是最新版本

  • 基于Pyinstaller打包Python程序并压缩文件大小

    这段时间应老师的要求,给实验室写了一个基于 PyQt5 的小工具.然而源码发过去人家还不要,一定要打包成可执行软件. 那就打包呗,刚好以前对 Pyinstaller 有一点接触,就用了一下这玩意.这篇博文主要记录一下基本用法和踩得一些坑. 1. 用 Pyinstaller 打包 Python 程序 首先我们需要安装 Pyinstaller: pip install pyinstaller 用 conda 也行,不过貌似最近清华的 Anaconda 源被封了,也不知道什么时候解禁. Pyinsta

  • Pyinstaller 打包exe教程及问题解决

    安装 pip insatll Pyinstaller 参数 pyinstaller -Fw main.py 参数 概述 -F,-onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用 -D, –onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护 -K, –tk 在部署时包含 TCL/TK -a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有

  • 使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件

    一.安装Pyinstaller 环境:python3.6.window10 注意事项: python64位版本打包的exe,只能在64位操作系统使用 打包文件夹和文件的名称不能用中文 pygame打包是里面的字体要改成"arial"格式. pygame.font.SysFont("宋体", 32) 32)  换成 pygame.font.SysFont('arial',32) 1.直接安装 pip命令安装:pip install Pyinstaller 安装成功后会

  • pyinstaller打包程序exe踩过的坑

    基础环境 python 2.7.17 pyinstaller 3.5 安装pyinstaller pip install pyinstaller 坑,大坑,深坑 背景:用pygame写了个贪吃蛇游戏,要打包成exe 用到了字体文件 C:\Windows\Fonts\simsun.ttc (宋体) 打包过程中没有报错 打包过程中的警告可以忽略,这个警告: WARNING: Hidden import "pygame._view" not found! 运行exe的时候报NotImplem

  • 解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

    解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题 最近写一个小脚本,源代码200多行,引入了 openpyxl.requests库,写完打包exe之后居然有64MB的大小,真是奇了葩了.网上查找各位大神的做法,自己又动手填了N个坑之后,总算找到缩小exe文件的方法了,这种方法必须使用到pipenv,详细记录如下: 1.安装pipenv 就像安装其他python库一样,在cmd环境下安装: pip install pipenv 2.安装完成后,随便找一个盘符,在这个

  • 解决python 读取npy文件太大不能完全显示的问题

    python读取npy文件时,太大不能完全显示,其解决方法 当用python读取npy文件时,会遇到npy文件太大,用print函数打印时不能完全显示,如以下情况: 解决办法 添加一行代码:np.set_printoptions(threshold = 1e6),其中threshold表示输出数组的元素数目 其结果如下: 补充:PyCharm打开大文件时提示文件过大,只显示前一小部分 使用pycharm打开一些大文件时,会出现上述提示,表明文件过大,只能以只读的方式显示前一小部分内容,这种情况显

  • 解决pyinstaller打包exe文件出现命令窗口一闪而过的问题

    用pyinstaller打包的exe文件打开时,命令窗口一闪而过,并且未出现GUI界面,也看不到错误信息,然后去网上搜相关的信息,最多的两种说法: 1.添加raw_input()或者os.system("pause")等待信息 ,但是添加后依然是命令窗口一闪而过 2.在命令窗口打开exe,网上有两种打开exe的方法 start Path\Project.exe start加exe文件的绝对路径,但是效果和双击exe文件一样,依然是一闪而过 cd path >>Project

  • 解决pyinstaller打包发布后的exe文件打开控制台闪退的问题

    解决步骤: 1.先打开一个cmd 2.cd到你的exe文件目录 3.输入    .\***.exe 以上这篇解决pyinstaller打包发布后的exe文件打开控制台闪退的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题

    我们用python 打包的exe文件的时候,每次运行后面都有一个黑框框,比如我的这个: 用tkinter做的图形界面,打包成exe文件,每次运行都先有黑色框框,我们一般电脑用的带有图形界面的软件都没有黑色框框, 所以可以取消掉黑色框框么,答案是肯定的. 在我们打包的时候:如果是直接指定python文件进行pyinstaller打包的话,需要添加--noconsole 例如:pyinstaller -F mycode.py --noconsole 还可以这样pyinstaller -F -w my

  • python3.9实现pyinstaller打包python文件成exe

    简述 1.python python作为一门解释型脚本语言,它有三种发布方式: 文件 : 源码文件,运行需要使用者安装Python环境并且安装依赖的各种库 pyc文件:pyc文件是Python解释器可以识别的二进制码,可跨平台的,需要使用者安装相应版本的Python和依赖库. 可执行文件:不需要安装python环境和依赖库,可针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,-) 2.pyInstaller PyInstaller工具可以把python解析器和脚本打包成一

  • 解决pyinstaller打包运行程序时出现缺少plotly库问题

    用pyinstaller打包tkinter程序,打包后运行exe是报如下错误: 搜索一阵发现是pyinstaller在打包的时候(StartRun.py我要打包的主程序文件)可能会漏掉一些三方库,就在打包的时候加上三方库的绝对路径: pyinstaller StartRun.py -F -p C:\Python36\Lib\site-packages 发现打包完之后还是会报以上问题,继续搜索后用添加hook文件的方式可以解决(彻底解决了我的问题),修改方法: 1.找到C:\Python36\Li

  • 解决pyinstaller打包pyqt5的问题

    pyinstaller打包使用pyqt5模块的时候,在win平台下,由于pyinstaller无法准确获取QT动态库文件路径,会报错导致无法打开运行程序,并提示错误信息pyinstaller failed to execute script pyi_rth_qt5plugins此时我们需要在打包的时候直接告诉pyinstaller到哪里去找,这个路径分隔符需要是unix形式: pyinstaller --paths C:/****/Python/Python35-32/Lib/site-pack

  • 完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误

    报错信息 最近闲来无事,用python的tkinter库开发了一款带日程提醒的万年历桌面程序.在程序开发结束开始打包时,却发现一直报错 PyInstaller cannot check for assembly dependencies. Please install PyWin32 or pywin32-ctypes. pip install pypiwin32 但是运行pip install pypiwin32时却提示两个库都已经安装过了 可是当再运行打包脚本时就是死活无法打包,就是提示缺少

  • pyinstaller打包单文件时--uac-admin选项不起作用怎么办

    使用pyinstaller能很方便的将python脚本打包成单个exe文件. 但是最近有一个需求,打包出来的exe文件需要用管理员权限执行! 也就是双击exe文件运行时,需要弹出一个uac界面让用户授权. 于是我查找pyinstaller的官方文档,说是在打时包加上--uac-admin参数就行了! 然而我实际操作了一下,发现直接加上这个参数仅在打包成多文件时有效 ,打包成单文件时是没用的. 但是我就想打包成单个exe文件,又要uac用户授权界面,怎么办? 好,解决方案: 如图,现在我们有一个t

随机推荐