pyinstaller打包后程序体积太大,如何解决?
上周写了个小工具,打包成exe。因为除了写Python的,绝大多数人电脑里都没有Python编译器,所以打包成exe,让用户(windows)双击就可以打开,也算是必备技能了。
直接用Pyinstaller,打开cmd:
pyinstaller -F E:\pycharm\huizong\huizong_excel.py
(-F 是打包成一个文件)
等了好久,终于完成打包,一看文件,嚯,40M!怪不得打包了这么久...
上网查了下资料,有人说,pycharm里安装了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。
有点道理,看到网上说用pipenv可以解决。虽然还不懂pipenv的强大之处,但知道它是个管理虚拟环境和包的工具,于是想着能不能用pipenv来创建一个新的python编译器以运行pyinstaller进行打包。
于是赶紧上网查了一下,pipenv pyinstaller。并操作如下:
打开cmd:
#建立虚拟环境
pipenv install
#进入虚拟环境
pipenv shell
#安装模块
pip install 小工具.py里面用到的模块(os,time,shutil,sys等模块不需要安装,也安装不起)
#打包的模块也要安装
pip install pyinstaller
#开始打包
pyinstaller -F E:\pycharm\huizong\huizong_excel.py
打包完成,一看大小,8M!成功!
注意:
关键点就一个:要在虚拟环境里安装pyinstaller
如果你没有在虚拟环境中安装pyinstaller,你同样可以使用pyinstaller命令,但是调用的是你系统原本的那个python编译器,内含很多关联库,导致即使在虚拟环境中,你打包的exe文件仍然非常大。
另外一点要注意的是:要在虚拟环境里安装好你py文件中调用的库,不然打包出来也没法正常运行。
另外还要注意一点:pipenv 安装的虚拟环境是在:C:\Users\Michael.virtualenvs 下,并且在该目录下会默认生产一个文件夹Michael-ov7d_vym来存放你安装的模块。如果,你在文件窗口路径处,输入cmd,打开命令窗口,执行进入虚拟环境命令:pipenv shell。那么在C:\Users\Michael.virtualenvs 下会生产一个文件夹,名称就是路径上的最后一个文件夹名。举例:在E:\pycharm\huizong 的窗口地址栏,输入cmd,再执行pipenv shell,在C:\Users\Michael.virtualenvs 下会生产一个huizong-ttnpT_7h文件夹。
这当然是有好处的,不同的程序,需要单独安装不同的模块包,再打包的时候,就不用臃肿。
另外,如果在打包过程中,遇到运行时错误:Permission denied: 'C:\WINDOWS\system32\api-ms-win-crt-stdio-l1-1-0.dll',需要修改cmd的权限,以管理员身份运行。具体操作参考:https://blog.csdn.net/weixin_41357300/article/details/91435327