<div class="gmail_quote">On 3 October 2010 21:43, Fernando Perez <span dir="ltr">&lt;<a href="http://fperez.net">fperez.net</a>@<a href="http://gmail.com">gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Hi Thomas,<br>
<div class="im"><br>
</div>Very interesting...  In fact, the twisted dependency shouldn&#39;t matter<br>
*at all* for the ipython-qtconsole code, that code uses strictly zmq<br>
and has no twisted dependency:<br></blockquote><div><br>Hmm, interesting. I&#39;d tried to import IPython.kernel in a shell session, and it fell over trying to import twisted, so I assumed that the frontend code needed the kernel code.<br>

<br>What it does: The Qt app starts up, and I get the banner message printed (Python version, copyright etc., IPython version, pointers to help systems). There&#39;s enough blank space that I can just scroll down to show a blank view. However, there&#39;s no prompt of any sort, and typing doesn&#39;t seem to do anything. At the terminal where I started it, I see some KSharedDataCache messages (related to icons--I&#39;m running KDE), &quot;Starting the kernel at...&quot;, details of four channels, and &quot;To connect another client...&quot;.  There were previously some error messages at the terminal too, but I tracked them down and fixed them easily enough.<br>

<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
And getting any fixes you may have made back into pyzmq would be great.<br>
All of the pyzmq/ipython-zmq code is brand new, so the earlier we<br>
catch any py3-noncompliance, the better off we&#39;ll be.<br></blockquote><div class="im"><br>You can see my changes at <a href="http://github.com/takowl/pyzmq/tree/py3zmq">http://github.com/takowl/pyzmq/tree/py3zmq</a> (look particularly at this commit, after I&#39;d realised that I should change the .pyx files, not the .c files: <a href="http://github.com/takowl/pyzmq/commit/8261e19189c6733f312e248bf77ee485286634d8">http://github.com/takowl/pyzmq/commit/8261e19189c6733f312e248bf77ee485286634d8</a> ).<br>

<br>In particular, there are a couple of places where you test for Python 3 to decide how to do something. When this is converted to C and compiled, the compiler can&#39;t find the relevant symbols for the Python 2 alternative. I don&#39;t know if Cython allows you to do the equivalent of C preprocessor code, so to get it working, I just commented out the Python 2 sections.<br>

<br>For the change to Cython that&#39;s needed at present, see the attached patch.<br>
<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
When ipython exits the only code that is meant to run is whatever we<br>
registered via atexti().  Just grep for atexit and you&#39;ll find those.<br>
<br>
But the real problem is not what happens to ipython, but to the<br>
*python* interpreter.  When *that* is truly being shut down (i.e.<br>
after atexit calls happen, which occur while the interpreter is still<br>
intact and fully operational), then various objects (including modules<br>
and possibly builtins) start getting torn down and may be in<br>
inconsistent state.  So __del__ calls that attempt to make use of<br>
other machinery may well find themselves trying to call things that<br>
have become None, and thus blow up.<font color="#888888"><br></font></blockquote><div><br>Well, atexit triggers .reset() of the InteractiveShell object, which looks like it should delete locally created variables. And it does; I&#39;ve just tried that a=A() example, and calling ip.reset() gives me the same &quot;ignored&quot; NameError as exiting the shell. Which is odd, because if I manually do the first step in .reset, clear()-ing each dictionary in .ns_refs_table, the &quot;object A deleted&quot; message pops out flawlessly. Thanks for the information, although I still can&#39;t work out exactly where the problem is.<br>

<br>For what it&#39;s worth, I did try running the same snippet of code in plain python 3.1, and it works as it should.<br><br>Thanks,<br>Thomas<br></div></div>