PyInstaller with Pandas 创建超过 500 MB 的 exe

新手上路,请多包涵

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

 import pandas as pd
print('hello world')

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

我知道 exe 必须包含一些重要文件,但是大到将近 1 GB 是正常的吗?如有必要,我可以提供警告日志或任何有助于解决问题的信息。

PS 与此同时,我的同事从同一个示例脚本创建了一个 exe,结果不到 100 MB,区别在于他没有使用 anaconda。会不会是这个原因?

任何帮助将不胜感激。

原文由 dylan_fan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

 from pandas import DataFrame as df
print('h')

我使用 conda 包获得了一个 203MB 的可执行文件,使用 pip 包获得了一个 30MB 的可执行文件。但是 conda 是纯 virtualenv 的一个很好的替代品。我可以使用 conda 和 Jupyter 进行开发,创建一些脚本“mycode.py”(我可以将 Jupyter notebook 作为 py 文件下载到 myfolder 中)。

但我的最终解决方案是:如果没有,请安装 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

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

 from pandas import DataFrame as df

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

 import pandas as pd

此外,在路径中使用国家字母时可能会出现一些错误,因此开发工具最好使用英文用户帐户。

原文由 abicorios 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 Maarten Fabré 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题