Pyandstaller与Pandas创建超过500 MB的exe

dyl*_*fan 7 python pyinstaller python-3.x pandas

我尝试使用PyInstaller 3.2.1创建一个exe文件,出于测试目的,我试图为下面的代码创建一个exe:

import pandas as pd
print('hello world')
Run Code Online (Sandbox Code Playgroud)

经过相当长的时间(15分钟+)后,我完成了620文件大小的dist文件夹和构建 - 150 MB.我使用Python 3.5.2 | Anaconda自定义(64位)在Windows上工作.可能值得注意的是,在dist文件夹中,mkl文件负责将近300 MB.我使用'pyinstaller.exe foo.py'运行pyinstaller.我尝试使用--exclude-module来排除某些依赖项,但最终还是使用了大量文件.无论我使用onefile还是onedir都没有任何区别.

我知道exe必须包含一些重要文件,但是接近1 GB是否正常?如有必要,我可以提供警告日志或任何可能有助于解决问题的事情.

PS同时我的同事用相同的样本脚本创建了一个exe,结果不到100 MB,不同的是他没有使用anaconda.这可能是事吗?

任何帮助将不胜感激.

小智 12

PyInstaller从conda包创建大型可执行文件,从pip包创建小可执行文件.从这个简单的python代码:

from pandas import DataFrame as df
print('h')
Run Code Online (Sandbox Code Playgroud)

我通过conda包获得203MB可执行文件,通过pip包获得30MB可执行文件.但康达是纯粹的virtualenv的好替代品.我可以用conda和Jupyter开发,创建一些mycode.py(我可以在myfolder中下载jupyter笔记本作为py文件).但我的最终解决方案是:如果你没有,请安装Miniconda,然后从Windows开始菜单打开Anaconda Prompt;

    cd myfolder
    conda create -n exe python=3
    activate exe
    pip install pandas pyinstaller pypiwin32
    echo hiddenimports = ['pandas._libs.tslibs.timedeltas'] > %CONDA_PREFIX%\Lib\site-packages\PyInstaller\hooks\hook-pandas.py
    pyinstaller -F mycode.py
Run Code Online (Sandbox Code Playgroud)

在我创建新环境'exe'的地方,pypiwin32需要pyinstaller但是没有自动安装,hook-pandas.py需要用pandas编译.此外,导入子模块不能帮助我优化可执行文件的大小.所以我不需要这个东西:

from pandas import DataFrame as df
Run Code Online (Sandbox Code Playgroud)

但我可以使用通常的代码:

import pandas as pd
Run Code Online (Sandbox Code Playgroud)

此外,使用路径中的国家字母可能会出现一些错误,因此开发工具的英语用户帐户很好.

  • 非常感谢,这可以让我的600+ mb dist文件夹达到80MB!我从https://github.com/upx/upx/releases下载UPX并将文件夹路径提供为`--upx-dir = C:\ upx394w`,它将事情进一步减少到28MB.所以,600MB到28MB.不错! (3认同)

Maa*_*bré 7

这可能是因为Anaconda版本numpy是使用mkl构建的.

如果您想减少可分发的大小,您可以使用单独的构建虚拟环境,pip而不是通过安装的软件包conda


Nik*_* VJ 5

这是仍然可以使用conda和避免的一种方法mkl。使用以下备用命令在安装熊猫之前安装numpy:
conda install -c conda-forge numpy

避免在其位置mkl使用OpenBLAS软件包。有关此问题的完整说明,请参见conda / conda-forge / numpy-feedstock github repo