我编写的代码大小只有2x kb,并使用了numpy和wxpython包。
然后我使用Pyinstaller成功编译了它;但是,它的可执行文件大小几乎是300mb。
我认为可执行文件如此之大的原因是Pyinstaller包含numpy中的所有文件。但实际上我没有使用numpy中的所有功能。 Pyinstaller不够聪明,只能包含我使用过的文件,还包括那些我没用过的文件。
有没有办法缩小我的可执行文件的大小?
答案 0 :(得分:2)
我在使用Anaconda的Windows 10上遇到了同样的问题。我的简单Numpy + wxPython应用程序导致PyInstaller发布了700MB。
膨胀的原因似乎是我的Numpy版本正在使用的英特尔数学核心库(MKL)。 dist输出目录包含许多非常大的mkl- *文件。
由于我的应用程序并不需要优化的数学库来提高性能,因此我可以使用不带MKL的Numpy版本将PyInstaller输出缩小到102MB(从700MB)。
这就是我的所作所为:
使用pip安装了必需的软件包,包括一个不使用英特尔MKL的numpy版本。
python -mpip install numpy
python -mpip install setuptools
python -mpip install python-dateutil
python -mpip install pytz
python -mpip install pyparsing
python -mpip install cycler
python -mpip install matplotlib
python -mpip install wxpython
python -mpip install pandas
python -mpip install pyinstaller
python -mpip install pywin32-ctypes
用
构建python -mPyInstaller app.py
这是由此产生的numpy配置(注意最后4行,其中lapack_mkl_info和blas_mkl_info不可用):
C:\Python27>c:\Python27\python.exe
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.show_config()
lapack_opt_info:
libraries = ['libopenblas_v0.2.20_mingwpy',
'libopenblas_v0.2.20_mingwpy']
library_dirs = ['c:\\opt\\64\\lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blas_opt_info:
libraries = ['libopenblas_v0.2.20_mingwpy',
'libopenblas_v0.2.20_mingwpy']
library_dirs = ['c:\\opt\\64\\lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
openblas_info:
libraries = ['libopenblas_v0.2.20_mingwpy',
'libopenblas_v0.2.20_mingwpy']
library_dirs = ['c:\\opt\\64\\lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blis_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['libopenblas_v0.2.20_mingwpy',
'libopenblas_v0.2.20_mingwpy']
library_dirs = ['c:\\opt\\64\\lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE