Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pyinstaller automatically includes unneeded modules

I am trying to create a .exe from a very simple script that I have written. The script only include glob and pandas. But pyinstaller is including matplotlib,numpy,scipy,qt4,ipython, and a bunch of other stuff. The .exe won't run because there is an error with matplotlib, but I don't even need matplotlib. What am I doing wrong to make pyinstaller not recognize that only glob and pandas are needed?

I have manually excluded scipy,matplotlib,PyQt4,and iPython and the .exe is still 160mb!

P.S. I'm doing this in winpython with python 3.4.

Edit: With a little further testing I have narrowed this down to Pandas. Even a script that only consists of:

import pandas

will create a dist folder that is 460MB or a single file .exe that is 182MB. What is the easiest way that I can find out which modules are being imported so that I can properly exclude all of them?

Edit2: I have tried making a hook-pandas.py file that contains:

excludedhooks=['scipy','matplotlib','PIL','cython','PyQt4','zmq']

The console output indicates that imports are being removed due to the hook file, but tons of files from these modules still end up in the dist folder.

I have also tried excluding these modules in the .spec file as well as in the console using --exclude-module but the files from those modules still show up.

like image 629
nickexists Avatar asked Apr 17 '16 16:04

nickexists


People also ask

How do I exclude packages in PyInstaller?

Although better solutions may have been given but there is one more method: You can use the '--exclude-module' attribute with the 'pyinstaller' command but this method is quite lengthy when you have to exclude many modules.

Does PyInstaller include modules?

To find out, PyInstaller finds all the import statements in your script. It finds the imported modules and looks in them for import statements, and so on recursively, until it has a complete list of modules your script may use.

Does PyInstaller include imports?

python - PyInstaller does not include imports - Stack Overflow. Stack Overflow for Teams – Start collaborating and sharing organizational knowledge.

What does PyInstaller -- Onefile do?

When we specify the onefile option, to the PyInstaller, it unpacks all the files to a TEMP directory, executes the file, and later discard the TEMP folder. When you specify the add-data option along with onefile, then you need to read the data referred to in the TEMP folder.


2 Answers

Pyinstaller may have figured those dependencies from your current ones. If you're sure, use --exclude-module flag to list all the modules you want to exclude.

http://pythonhosted.org/PyInstaller/#general-options

like image 185
Pandemonium Avatar answered Oct 18 '22 21:10

Pandemonium


Not sure if this really counts as a solutions. But by ignoring winpython all together and using a standard installation of python that only had pip installs of pyinstaller and pandas added to it I was easily able generate a functional .exe that was 18MB. I guess it had something to do with winpython.

like image 26
nickexists Avatar answered Oct 18 '22 22:10

nickexists