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.
Comments
-
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 resultingdist
folder has a size of 390MB.If I remove
import numpy as np
the resultingdist
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 about 5 yearsWill the exe file be stored in Dist directory like normal?
-
Miffy about 5 yearsI have created (base) environment and kind of stuck. How do I get out?
-
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 about 5 yearsI 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 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 almost 5 yearsI had to add the constraint
blas=*=openblas
to preventmkl
from being installed. Found this recommendation here.