[IPython-dev] strange namespace issue

Darren Dale dd55@cornell....
Mon Sep 10 13:19:42 CDT 2007


On Monday 10 September 2007 01:23:51 pm Fernando Perez wrote:
> On 9/10/07, Darren Dale <dd55@cornell.edu> wrote:
> > I get more errors with embedding_in_qt4, it seems like all the modules in
> > the script have become NoneType. I can even print dir(QtCore) right
> > before the line that produces the attribute error, which looks ok, but I
> > still get the attribute error. I tried dropping back to mpl-0.90.1 and
> > there was no change. I also tried removing setuptools, clearing my
> > site-packages, reinstalling ipython and matplotlib, no improvement. I
> > dont get the attribute errors if I run the scripts outside of ipython.
> >
> > My only guess is that this has something to do with the way the  Shell.py
> > overwrites certain module functions and classes like gtk.mainloop, or
> > QtGui.QApplication, but I dont know.
>
> I certainly see the problem here, but I have no idea of what it can be
> or a solution.  To be honest, I'd always thought that the embedding*
> examples were a bit more than ipython could handle.  Granted, the fact
> that one can run something as complicated as the new mayavi2 windows
> from within ipython indicates that it must be possible, but when we
> wrote all that code, the real target was just cooperation with pylab.
> Once we got that working we kind of stopped looking, and that means we
> may well have left important ends untied.

Just to be thorough, I'll note that the problem also exists for some of the 
regular pylab scripts as well: dynamic_collection.py, animation_blit_qt4. I 
found a post that might be relevant: 
http://osdir.com/ml/web.zope.devel/2004-02/msg00051.html,

"Python's reload() [...] twiddles the old functions and methods
in such a way that all old globals are set to None.  If you have the
misfortune of calling an old function or method, it's likely to fail"

I can't spend any more time on this now. If I knew how to solve this problem, 
we could run pyqt* programs in ipython, they would be non-blocking, and it 
would be possible to inspect the application state. Instead, I'm leaving it 
so the programs do block, this way they run without errors.

Darren


More information about the IPython-dev mailing list