我尝试使用PyInstaller 3.2.1创建一个exe文件,出于测试目的,我试图为下面的代码创建一个exe:
import pandas as pd
print('hello world')
经过相当长的时间(15分钟+)后,我完成了大约620 MB的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是否正常?如有必要,我可以提供警告日志或任何可能有助于解决问题的事项。
P.S。与此同时,我的同事从相同的示例脚本创建了一个exe,结果不到100 MB,不同的是他没有使用anaconda。这可能是事吗?
任何帮助将不胜感激。
答案 0 :(得分:9)
PyInstaller从conda包创建大型可执行文件,从pip包创建小可执行文件。从这个简单的python代码:
from pandas import DataFrame as df
print('h')
我通过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
在我创建新环境的地方' exe',pypiwin32需要pyinstaller但是没有自动安装,hook-pandas.py需要用pandas编译。 此外,导入子模块不能帮助我优化可执行文件的大小。 所以我不需要这个东西:
from pandas import DataFrame as df
但我可以使用通常的代码:
import pandas as pd
此外,在使用路径中的国家字母时可能会出现一些错误,因此开发工具的英文用户帐户很不错。
答案 1 :(得分:7)
这可能是因为numpy
的Anaconda版本是使用mkl构建的。
如果您想减少可分发的尺寸,可以使用单独的建筑物virtual environment,并通过pip
而不是conda
答案 2 :(得分:5)
这是一种仍在使用conda
并避免mkl
的方法。在使用此备用命令安装pandas之前安装numpy:
conda install -c conda-forge numpy
避免mkl
,在其位置使用OpenBLAS包。
this issue at conda/conda-forge/numpy-feedstock github repo中的完整说明。
答案 3 :(得分:1)
你需要纯粹的python环境,没有Anaconda。
因为它有太多无用的包。 使用尽可能少的软件包在另一台PC上安装新的python环境!
然后再次尝试使用pyinstaller。使用此方法,pyinstaller将文件从200M减少到8M。
PS:如果你缺少一些包,你可以点击安装......
答案 4 :(得分:1)
与Anaconda合作时的简单解决方案:
-在Anaconda Navigator中创建新环境。 (新环境中没有导致问题的大量程序包。)
-打开终端,然后使用pipinstall包含所需的软件包。 (确保它在新环境中)
-运行pyinstaller。
我将.exe从300 MB减少到30 MB。
答案 5 :(得分:0)
文件增长如此之大的原因是我正在研究公司的共享驱动器(公司政策)。将工作目录移动到本地驱动器后问题消失了。我也开始使用virtualenv并且排除了脚本中没有使用的一些依赖项,它们都可以变得非常小,易于共享.exe文件。