使用numpy和wxpython等软件包编译代码时的大小

时间:2014-09-22 02:37:17

标签: python-2.7 numpy wxpython

我编写的代码大小只有2x kb,并使用了numpy和wxpython包。

然后我使用Pyinstaller成功编译了它;但是,它的可执行文件大小几乎是300mb。

我认为可执行文件如此之大的原因是Pyinstaller包含numpy中的所有文件。但实际上我没有使用numpy中的所有功能。 Pyinstaller不够聪明,只能包含我使用过的文件,还包括那些我没用过的文件。

有没有办法缩小我的可执行文件的大小?

1 个答案:

答案 0 :(得分:2)

我在使用Anaconda的Windows 10上遇到了同样的问题。我的简单Numpy + wxPython应用程序导致PyInstaller发布了700MB。

膨胀的原因似乎是我的Numpy版本正在使用的英特尔数学核心库(MKL)。 dist输出目录包含许多非常大的mkl- *文件。

由于我的应用程序并不需要优化的数学库来提高性能,因此我可以使用不带MKL的Numpy版本将PyInstaller输出缩小到102MB(从700MB)。

这就是我的所作所为:

  1. 从python.org安装Python
  2. 使用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
    
  3. 构建
    python -mPyInstaller app.py
    
  4. 这是由此产生的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