<br><br><div class="gmail_quote">On Mon, Feb 13, 2012 at 13:33, Jonathan Stickel <span dir="ltr">&lt;<a href="mailto:jjstickel@gmail.com" target="_blank">jjstickel@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


I recently got bit by the error in the subject line.  It arose when I<br>
installed Mayavi-4.1.0 (with pyface-4.1.0 as a dependency) and imported<br>
mlab.  However, it can be reproduced most simply by doing:<br>
<br>
<br>
$ ipython --gui=qt<br>
&lt;...&gt;<br>
In [1]: import sip<br>
<br>
In [2]: sip.setapi(&#39;QString&#39;, 2)<br>
---------------------------------------------------------------------------<br>
ValueError                                Traceback (most recent call last)<br>
/Users/jstickel/&lt;ipython-input-2-d786b937fa44&gt; in &lt;module&gt;()<br>
----&gt; 1 sip.setapi(&#39;QString&#39;, 2)<br>
<br>
ValueError: API &#39;QString&#39; has already been set to version 1<br></blockquote><div><br></div><div>Naturally, as `--gui qt` implies an import of PyQt, and any sip.setapi calls must be done before that happens.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
It also occurs inside a qtconsole started with &quot;ipython qtconsole<br>
--pylab&quot;.</blockquote><div><br></div><div>True only if the Qt backend is the default. Doesn&#39;t affect other matplotlib backends (using qtconsole *does not* imply qt matplotlib).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  Fortunately, I found that the workaround suggested here:<br>
<br>
<a href="http://readthedocs.org/docs/neuronvisio/en/latest/gettingstarted.html" target="_blank">http://readthedocs.org/docs/neuronvisio/en/latest/gettingstarted.html</a><br>
<br>
namely,<br>
<br>
$ export QT_API==pyqt<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
worked for me.  I am using python-2.6.  I understand that this will not<br>
happen with python-3.x.  Anyway, I am reporting to this list in case it<br>
might help others.  This might be worth having in the IPython FAQ as well.<br></blockquote><div><br></div><div><div><br class="Apple-interchange-newline">This is not a workaround, it is the Right Way to do it, but you are right in pointing out that it should be better documented.</div>

<div><br></div><div>There was much discussion and consternation about what the default should be, and we have settled on this:</div><div><br></div><div>ETS (and thus mayavi) uses v2, but it is very nearly alone in the Python world (pre-3.0) in that respect.  PyQt&#39;s default is v1, and if we forced v2, we would break compatibility with *many* qt libraries.  So the IPython default is to use PyQt&#39;s own defaults.  However, if you use the ETS environment variable to specify the Qt API, then we assume that you are using ETS, and we should match their choice.  Thus you can specify any of the threeavailable  options with this ETS env variable:</div>

<div><br></div><div>QT_API=pyside # use PySide, also affects ETS</div><div>QT_API=pyqt # use PyQt v2, matches ETS</div><div>QT_API undefined # use PyQt v1, matching library defaults</div><div><br></div></div><div>So the answer is basically: if you use ETS with IPython, you *must* specify QT_API, because IPython needs to make a decision at import time, and the logical default is incompatible with ETS.</div>

<div><br></div><div>-MinRK</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Regards,<br>
Jonathan<br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org" target="_blank">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</blockquote></div><br>