size of executable using pyinstaller and numpy

10,846

Thanks to the user balletpiraat I found a solution.

Install numpy with: conda install -c conda-forge numpy

To test this I created two anaconda environments. Environment "normalnumpy" was created with:

conda create -n normalnumpy python=3.7
activate normalnumpy
conda install numpy
pip install pyinstaller

resulting in:

altgraph                  0.16.1                    <pip>
blas                      1.0                         mkl
certifi                   2018.10.15               py37_0
future                    0.16.0                    <pip>
icc_rt                    2017.0.4             h97af966_0
intel-openmp              2019.0                      118
macholib                  1.11                      <pip>
mkl                       2019.0                      118
mkl_fft                   1.0.6            py37hdbbee80_0
mkl_random                1.0.1            py37h77b88f5_1
numpy                     1.15.2           py37ha559c80_0
numpy-base                1.15.2           py37h8128ebf_0
pefile                    2018.8.8                  <pip>
pip                       10.0.1                   py37_0
PyInstaller               3.4                       <pip>
python                    3.7.0                hea74fb7_0
pywin32-ctypes            0.2.0                     <pip>
setuptools                40.4.3                   py37_0
vc                        14.1                 h0510ff6_4
vs2015_runtime            14.15.26706          h3a45250_0
wheel                     0.32.1                   py37_0
wincertstore              0.2                      py37_0

Environment "extranumpy" was created with:

conda create -n extranumpy python=3.7
activate extranumpy
conda install -c conda-forge numpy
pip install pyinstaller

resulting in:

altgraph                  0.16.1                    <pip>
blas                      1.1                    openblas    conda-forge
certifi                   2018.10.15            py37_1000    conda-forge
future                    0.16.0                    <pip>
libflang                  5.0.0             vc14_20180208  [vc14]  conda-forge
llvm-meta                 5.0.0                         0    conda-forge
macholib                  1.11                      <pip>
numpy                     1.15.2          py37_blas_openblash8d851b4_1  [blas_openblas]  conda-forge
openblas                  0.2.20                   vc14_8  [vc14]  conda-forge
openmp                    5.0.0                    vc14_1  [vc14]  conda-forge
pefile                    2018.8.8                  <pip>
pip                       10.0.1                   py37_0
PyInstaller               3.4                       <pip>
python                    3.7.0                hea74fb7_0
pywin32-ctypes            0.2.0                     <pip>
setuptools                40.4.3                   py37_0
vc                        14                            0    conda-forge
vs2015_runtime            14.15.26706          h3a45250_0
wheel                     0.32.1                   py37_0
wincertstore              0.2                      py37_0

I tested both environments with "main.py":

import numpy as np
if __name__ == '__main__':
    test = np.array([42])
    print(test)

and

pyinstaller --onefile main.py

the "normalnumpy" executable is 228MB, the "extranumpy" executable is 10MB.

Share:
10,846
Jonas
Author by

Jonas

I'm sorry Dave, I'm afraid I can't do that.

Updated on June 21, 2022

Comments

  • Jonas
    Jonas almost 2 years

    I wrote a short program main.py using numpy and Qt:

    from PyQt5 import QtWidgets
    import numpy as np
    import sys
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = QtWidgets.QTextEdit('hello')
        w.show()
        sys.exit(app.exec_())
    

    When I use pyinstaller --windowed main.py the resulting dist folder has a size of 390MB.

    If I remove import numpy as np the resulting dist folder is only 70MB.

    Is there any way to reduce the size while still using numpy? Maybe by only including the dlls I really use?

  • Miffy
    Miffy about 5 years
    Will the exe file be stored in Dist directory like normal?
  • Miffy
    Miffy about 5 years
    I have created (base) environment and kind of stuck. How do I get out?
  • Jonas
    Jonas about 5 years
    @Miffy There are many tutorials how to create an environment. If you did that you have to activate it and run pyinstaller like normal. The files will be in a dist folder also like running it from your "normal" python installation. All commands and code are posted in my answer. I suggest you try the example and continue from there.
  • Miffy
    Miffy about 5 years
    I did try and I was into base environment. I tried few solutions on how to exit it. That messed up all the libraries installed in my computer. Now I get a quarantine error whenever I try to install pyinstaller
  • Jonas
    Jonas about 5 years
    @Miffy You should ask a separate question about that, its hard to resolve without the error message and in the comments.
  • Steven C. Howell
    Steven C. Howell almost 5 years
    I had to add the constraint blas=*=openblas to prevent mkl from being installed. Found this recommendation here.