pyinstaller打包exe
pyinstaller打包exe
python是一门解释性语言,所以当代码运行时,需要python.exe等解释器一句一句的对代码进行翻译(运行)。
(本篇重在阐述pyinstaller打包为什么会这么大,精简打包压缩流程)
pyinstaller工具
pyinstaller可以很轻松把py程序打包成exe文件,还可以加ico图标。
本质
因为python终究是一门解释语言,依赖解释器环境,pyinstaller,其实打包的是一个可以运行脚本的环境(env)。这里包含python.exe这个脚本解释器,因此生成的exe文件一般都很大10m以上。
我的痛点
之前用过python打包过一些文件,大小还算可以接受,15m左右,直到今天,给同学写了一个GUI界面,用了PySide2、numpy、pandas。打包竟然到了100多m,这。。。属实给我蚌埠住了。

其实这里面打包了很多没有用的东西,归根到底,是全局环境的问题。
压缩打包之后,大小几乎就缩小了一半。

因为功能过于简单,其实这不大,如果功能开发的多的话,打包也不会大多少的。
压缩打包解决方案
上文分析了,py打包的主要原因是因为,全局环境太乱,太复杂,导致一些没有用的东西,也打包进了环境,这十分的憋屈。
我的解决流程如下:
- 利用virtualenv创建一个全新的环境。
- 在全局环境中安装所要的库。
- pyinstaller进行打包
1、virtualenv的安装以及使用
pip install virtualenvvirtualenv会放在python安装目录下的scripts的文件夹下哈。如果添加环境变量了,就可以直接使用啦
我们先创建一个新环境。
virtualenv envname
进入school下可以看到,和python的全局环境差不多哈

Lib里可以看pip安装的包,scripts中可以看到pip安装的工具。
这里主要说一下这scripts下的工具哈。
使用cd命令进入到scripts中

- pip这几个工具都是一样的,只是名字不一样而已啦,pip3.8这些名字只是为了区分不同python版本下的pip管理工具。这里的pip是新环境下的哈。
- python.exe就是解释器哈。运行的时候用的。
- activate这个可执行文件,是切换环境的哈,运行这个文件,可以进入虚拟环境。
- deacticate这个文件可以退出虚拟环境。
我们先进入到这个虚拟环境下哈。

看到这个后面出现虚拟环境的名字就说明进入到里面了哈。
现在我们打包一下这个schoolWifi的项目哈

这个项目只用到这俩个库哈我们先安装一下所用到的库。
re库是自带的,所以我们只需要安装requests库。

另外还需要装pyinstaller哈
cd命令切换到打包project的目录下
pyinstaller -w -F -i xiao.ico main.py
此时已经很小很小了。
还能不能再小。
压缩神器upx
在上面的exe的基础上,upx还能再压缩exe,可谓是锦上添花。
安装以及使用
在github官网上下载upx对应系统的压缩包,解压到虚拟环境下的scripts下。

可以看到又进一步压缩了一点。实际上这个过程是加壳哈。