Cane's Blog

Cane

【Problem】pyinstaller 安装 numpy, pandas, scipy 导致文件过大

64
2020-12-01

问题描述

python 包里引用了关于科学计算的几个包,导致生成的软件体积十分庞大

复现步骤

1.创建虚拟环境

2.在虚拟环境下安装所有依赖包

3.在虚拟环境下安装 pyinstaller (否则执行 pyinstaller 生成的文件是依赖于Anaconda的包,十分臃肿)

4.在虚拟环境下执行 pyinstaller demo.py

但是当,环境包里面包含 numpy、pandas 或者 scipy 的时候,即使采取了以上措施,生成的包依然十分臃肿

截图

环境.jpgdemo.jpg总大小.jpg

解决方案

方案1: 放弃 Anaconda,用 Miniconda 作为替代

Miniconda 是 Anaconda 的精简版,舍去了很多不必要的依赖库

方案2: 使用 conda 创建虚拟环境,在 conda 虚拟环境安装 numpy 的时候使用 conda-forge

conda create -n demo python=3.7
activate demo
conda install -c conda-forge numpy
pip install pyinstaller

此种方法不知为何,我生成的文件总大小还是500+MB,关于此方法的具体步骤可见:StackOverflow - size of executable using pyinstaller and numpy,网上大部分介绍的解决方法都是此种方法。

方案3:使用 conda 安装 nomkl*

conda install nomkl
conda create -n demo python nomkl
conda install -n demo numpy

也可以切换到 demo 虚拟环境(activate demo),执行pip install numpy

pip install pyinstaller

此种方法,在 「win10」平台测试成功,详请「How to install scipy without mkl

conda install nomkl numpy(上面的步骤据说可以用这个替代,未验证)

一些补充

关于 numpy 导致文件过大的讨论:「https://github.com/conda-forge/numpy-feedstock/issues/108

其他的经过测试的不可靠方案:

  1. 修改.spec,排除mkl开头的文件,会导致生成的文件无法正常运行,缺失支持文件