matplotlib, py2exe import problems

Thanks, John. Now works like a charm after checking the recent examples.

···

-----Original Message-----
From: John Hunter [mailto:jdhunter@…4…]
Sent: Thursday, July 14, 2005 7:51 PM
To: Noko Phala
Cc: matplotlib-users@lists.sourceforge.net
Subject: Re: [Matplotlib-users] matplotlib, py2exe import problems

    > Can someone tell me how to successfully create an executable
    > of a script that uses matplotlib? The example script in the
    > documentation does not appear to work for my case. I keep
    > missing modules, and everytime I add the missing module, a
    > new one crops up. Much like the problems listed here:
    >
http://mail.python.org/pipermail/python-list/2005-February/267595.html
    > My recent error message is:

    > Traceback (most recent call last):

    > File "Uranium_Leaching_ Modelv1.py", line 162, in ?

    > File "pylab.pyc", line 1, in ?

    > File "matplotlib\pylab.pyc", line 217, in ?

    > File "matplotlib\backends\__init__.pyc", line 24, in
    > pylab_setup

    > ImportError: No module named backend_tkagg

Which backend do you want to use? Are you using the pylab interface.
It looks like you are getting the default win32 backend backend_tkagg
but you have explicitly excluded it with

    "py2exe": {"excludes": ['_gtkagg', '_tkagg'],

It looks like you are using an old example, because these lines are
not included in the examples pointed to in the FAQ. BTW, I have just
tested and updated the py2exe example zip file so you may want
download it

  http://matplotlib.sourceforge.net/faq.html#PY2EXE
  http://matplotlib.sourceforge.net/py2exe_examples.zip

The update includes an example for tkagg in addition to gtkagg and
wxagg.

Note in the current release in matplotlib (0.83.1), before freezing,
you need to replace these lines in
site-packages/matplotlib/numerix/__init__.py

g = globals()
l = locals()
__import__('ma', g, l)
__import__('fft', g, l)
__import__('linear_algebra', g, l)
__import__('random_array', g, l)
__import__('mlab', g, l)

la = linear_algebra
ra = random_array

with the following

from matplotlib import FROZEN

if not FROZEN:
    g = globals()
    l = locals()
    __import__('ma', g, l)
    __import__('fft', g, l)
    __import__('linear_algebra', g, l)
    __import__('random_array', g, l)
    __import__('mlab', g, l)

    la = linear_algebra
    ra = random_array

because they break py2exe. These lines import the sub-modules of
numerix (fft, ma, mlab, etc) into the numerix namespace. So you can
do for example

import numerix as nx
x = nx.mlab.mean( nx.mlab.randn(10000)

w/o them you have to explicitly import the submodules. Can anyone
suggest a way to do this that doesn't break py2exe? Apparently py2exe
doesn't handle __import__ very well

------------------------------------------------------------------------------------------
This e-mail was checked by the e-Sweeper Service.
For more information visit our website, Clearswift Corporation e-Sweeper :
http://www.mimesweeper.com/products/esweeper/
------------------------------------------------------------------------------------------