ImportError: No module named mpl_toolkits with maptlotlib 1.3.0 and py2exe
Question: I can't figure out how to be able to package this via py2exe now:

I am running the command:

    
    
    python setup2.py py2exe
    

via python 2.7.5 and matplotlib 1.3.0 and py2exe 0.6.9 and 0.6.10dev

This worked with matplotlib 1.2.x

I have read <http://www.py2exe.org/index.cgi/ExeWithEggs> and tried to
implement the suggestions for handling the mpl_toolkits since it's having
become a namespace package.

I'm trying to get an answer here too:
<http://matplotlib.1069221.n5.nabble.com/1-3-0-and-py2exe-regression-
td41723.html>

Adding an empty `__init__.py` to mpl_toolkits makes it work, but this is only
a workaround to the problem.

**Can anyone suggest what I need to make py2exe work with
mpl_toolkits.axes_grid1 in matplotlib 1.3.0 ?:**

* * *

test_mpl.py is:

    
    
    from mpl_toolkits.axes_grid1 import make_axes_locatable, axes_size
    
    if __name__ == '__main__':
        print make_axes_locatable, axes_size
    

* * *

setup2.py is:

    
    
    import py2exe
    import distutils.sysconfig
    from distutils.core import setup
    
    # attempts to get it to work
    import modulefinder
    import matplotlib
    import mpl_toolkits.axes_grid1
    __import__('pkg_resources').declare_namespace("mpl_toolkits")
    __import__('pkg_resources').declare_namespace("mpl_toolkits.axes_grid1")
    modulefinder.AddPackagePath("mpl_toolkits", matplotlib.__path__[0])
    modulefinder.AddPackagePath("mpl_toolkits.axes_grid1", mpl_toolkits.axes_grid1.__path__[0])
    
    # end of attempts to get it to work
    
    options={'py2exe': {'packages' : ['matplotlib', 'mpl_toolkits.axes_grid1', 'pylab', 'zmq'],
                        'includes': ['zmq', 'six'],
                        'excludes': ['_gdk', '_gtk', '_gtkagg', '_tkagg', 'PyQt4.uic.port_v3', 'Tkconstants', 'Tkinter', 'tcl'],
                        'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                         'libgdk_pixbuf-2.0-0.dll',
                                         'libgobject-2.0-0.dll',
                                         'tcl85.dll',
                                         'tk85.dll'],
                        'skip_archive': True },}
    
    setup(console=['test_mpl.py'], options=options)
    

* * *

output is:

    
    
    running py2exe
    *** searching for required modules ***
    Traceback (most recent call last):
      File "setup2.py", line 23, in <module>
        setup(console=['test_mpl.py'], options=options)
      File "C:\Python27\lib\distutils\core.py", line 152, in setup
        dist.run_commands()
      File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
        self.run_command(cmd)
      File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
        cmd_obj.run()
      File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 243, in run
        self._run()
      File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 296, in _run
        self.find_needed_modules(mf, required_files, required_modules)
      File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 1308, in find_needed_modules
        mf.import_hook(f)
      File "C:\Python27\lib\site-packages\py2exe\mf.py", line 719, in import_hook
        return Base.import_hook(self,name,caller,fromlist,level)
      File "C:\Python27\lib\site-packages\py2exe\mf.py", line 136, in import_hook
        q, tail = self.find_head_package(parent, name)
      File "C:\Python27\lib\site-packages\py2exe\mf.py", line 204, in find_head_package
        raise ImportError, "No module named " + qname
    ImportError: No module named mpl_toolkits
    


Answer: There is a quite simple workaround to this problem. Find the directory from
which mpl_tools is imported and simply add an empty text file named
`__init__.py` in that directory. py2exe will now find and include this module
without any special imports needed in the setup file.

You can find the mpl_tools directory by typing the following in a python
console:

    
    
    import importlib
    importlib.import_module('mpl_toolkits').__path__
    

I found the solution here <http://stackoverflow.com/a/11632115/2166823> and it
seems to apply to namespace packages in general.

