Pyinstaller打包的坑
pyinstaller是python windows下打包的神器,但是使用过程中经常会碰到坑,以下是我碰到的坑。
1、打包体积太大
1.1在虚拟环境下搭建干净的环境
打开cmd 输入以下命令创建一个虚拟环境。
#建立虚拟环境
pipenv install
#进入虚拟环境
pipenv shell
#安装模块
pip install 你py文件里用到的模块
#打包的模块也要安装
pip install pyinstaller
#开始打包
pyinstaller -Fw
1.2把不必要的库去掉
记得我有次做一个数据去重的功能,用了pandas的库,结果打包起来将其他没有用到的库也打包进来了,后面一查,发现pandas、Numpy等多个库会相互关联,在打包的时候尽管没用到,打包也要算进来。(特别是numpy和pandas库及其的大)
本来打包下来一个简单信息写入excel并去重的小程序,硬是打包成了700m的执行文件,后来去重的功能我不用pandas写,立马到了11m,小的非常明显。
2、直接执行py文件可以运行,打包后无法执行
这个问题我查了蛮久的,后面在知乎上找到了解决方案。先到/build/name/warnname.txt的报错里看,发现了n多的missing module,想想也不可能缺失那么多模块。
于是试了第二种方法。平常我们打包都会-Fw,这次我让他运行的时候窗口化,直接-F
pyinstaller -F file名
执行新生成的应用程序,在cmd框出现的时候注意好,到了弹报错信息的时候快速截屏,拍下错误信息。
提示我没有一个十进制的库,但是事实上,我并没有直接引用这个库,查了很多方法,最后发现编译过程中会参生一个同名的spec文件,将里面图示部分加入提示缺少的库
然后把之前生成的dist等文件删了,重新编译一遍,ok通过!
3、在32位电脑上无法运行
原先我还以为是电脑缺少一些必要的环境文件,后来想想用的都是些基本的库。专头发现是因为自己的电脑是64位,当初装的anaconda和py都是64位的,pyinstaller也是64位的,所以必然没法兼容32位。
3.1方法1——虚拟一个32位的python环境,装32位pyinstaller,再重新编译。
可以利用anaconda
set CONDA_FORCE_32BIT=1 //切换到32位
conda create --name python36 python=3.6 //创建一个python3.6的环境,命名为python36
conda info --envs //查看是否添加成功
activate python36 //切换到python3.6环境
python --version //确认python环境
然后再装pyinstaller再去打包
pip -V //再次确认是否为32位的pip
pip install pyinstaller //安装pyinstaller
3.2方法2——重装32位的python环境
这种就重装一个新的环境,没啥讲的。