pyinstaller打包exe文件过大
作为认真学习了Python两个多月的小白,觉得python还是有很多玄学,一直搞不懂明明一毛一样的步骤,为什么我用pyinstaller打包出来的exe有300M,别人只有30M!为了弄清楚介个问题,老姐姐真的是搞了几天几夜,参考了多个前辈的文档,通过自己的各种猜测终于搞好了,抑制不住自己澎湃的心情,想跟大家分享一下一些可能不是很成熟的想法。
part1不成熟的猜测
在很多文档里面都有写到过exe过大,可能是打包很多无用的模块和库,打包完后会有两个文件夹,build和dist,对比两次在build里PKG文件,在没打包成功前就是290多M,打包成功后就是29M,根据缩写和文件,我猜测PKG说明了打包模块和库有多大,所以打包了多余的包这个我认为是正确的。
我使用了各种包括建立虚拟环境的方法都没办法避免打包多余的包,当然太复杂看不懂的就没试了。但是在试的过程中,自己也进行了思考,和基友使用同一种打包方法,步骤一毛一样,为什么我不行呢?有什么不同的地方,那只能是安装的环境了。在各种不同的打包的过程中,我都明显看到会引用anaconda库,再加上很多文章说打包是会一起打包anaconda很多的已有包,所以暂时认为anaconda有影响。然后,根据建立虚拟环境的思路,是为了创造一个没有多余包的环境,我之前很多次安装需要的包时直接运行cmd后pip,可能也会导致pyinstaller打包整个环境安装过的包,因为我比较懒,懒得一条条实验,所以决定按着自己的思路,重新安装环境。
Part2重新安装环境
首先,先把自己的环境卸载干净,有意要试一试的需要百度如何干净卸载python+anaconda+pycharm。
完成卸载后,我决定不再安装anaconda,大家可以查一下不安装anaconda有什么影响,我暂时判断影响不大,因为pycharm用setting安装包也很方便,然后大家就可以正常安装python和pycharm了。
python安装这里有个坑,坑了我两天,就是python现在已经是3.8版了,但是pyinstaller貌似不支持3.8版本,没卸载anconda前,在pycharm 虚拟环境Teminal下打包完,打开exe程序会出Fail to execute script pyi_rth_pkgres。当时也是找了很多方法,但是没办法解决,后来没安装anaconda后,直接用pycharm安装,居然直接按不上!头都大了!无意间看到github下面的pycharm包的描述,支持的python是 3.5到3.7版本,之前又隐约看到什么降级解决,当时没搞懂什么意思,降什么级?到这里,大概猜测是不支持3.8版本,所以果断改安装了3.7版本,果然一切都顺利了,太爱自己了!
Part3规范自己的工程建立、包安装
作为菜鸟的我,真的是很菜很菜,自己真的是很大胆,随便点点能够运行得起来就不去探究具体的方式,沾沾自喜,觉得so easy,封装exe真的是教会了我做人。
重新安装好后我就决定要好好维护这个干净的环境。
step1:
pycharm建立工程使用虚拟环境,这个之前看到入门材料有写,最好使用virtualenv,建立虚拟环境然后这个环境就是独立的,包括安装各种库,都不会影响其他工程,
安装各种依赖库不要用cmd-pip,直接在pycharm工程里setting安装或者Teminal-pip,虽然我不确定有米有影响。
最后就是在pycharm Teminal运行:
pyinstaller -Fw XXX.py
然后还有一个菜鸟会遇到的问题,就是pycharm安装依赖库的时候经常因为镜像问题导致安装不上,推荐一个文pycharm创建虚拟环境venv和添加依赖库package - 一字千金 - 博客园 /bclshuai/p/12488341.html
超有用!!!
好勒,以上就是一个菜鸟不成熟的日志,今晚终于可以睡个好觉了。
补充若干打包exe问题
打包过程中经常存在打包完后打不开程序,这个是时候打包exe的时候可以先不屏蔽dos窗口,这样可以用来排查问题。
即使用:pyinstaller -F XX.py就行了
1.Fail to execute script pyi_rth_pkgres
这里可以看到原因是Pyinstaller No module named pkg_resources.py2_warn
查资料说是pyinstaller跟不上setuptools升级,把setuptools降级到44.0.0及以下
pip install setuptools==44.0.0
实验后解决
2.No module named ‘win32com’
打包好exe后,win10使用没问题,win7使用会出现
看着是pandas的库有问题,跟据setuptools经验对pandas降了级,还是有问题,因为是在pycharm terminal打包的,看了一下记录,会有No module named ‘win32com’
pycharm中没有导入pywin32,setting导入,打包成功。
后来试着不降级pandas,还是会有问题,具体要降到多少还没试,直接降到0.25版本了,现在最新是1.03。。。
然后就是待更新了。。。。。
python使人头秃,一直python一直秃。。。。