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打包的主要原因是因为,全局环境太乱,太复杂,导致一些没有用的东西,也打包进了环境,这十分的憋屈。

我的解决流程如下:

  1. 利用virtualenv创建一个全新的环境。
  2. 在全局环境中安装所要的库。
  3. pyinstaller进行打包

1、virtualenv的安装以及使用

pip install virtualenv

virtualenv会放在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下。

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