Mayavi no se ejecuta desde Spyder: se queja de “ValueError: API ‘QString’ …”

No puedo ejecutar / usar la biblioteca Mayavi desde el IDE de Spyder. He descrito el problema a continuación. Cualquier ayuda será muy útil. (Muchas gracias por adelantado.)

Pasos para reproducir el problema:

  1. Solo importando la biblioteca de Mayavi en un script (por ejemplo, usando “importar mayavi.mlab como mlab”) y ejecutando el script se reproducirá este problema.
  2. Incluyo un código de prueba (tenga en cuenta que este código es un código de ejemplo del sitio web de Mayavi) aquí para reproducir el problema:

código

from numpy import sin, cos, mgrid import mayavi.mlab as mmlab def f(x,y): return sin(x + y) + sin(2*x - y) + cos(3*x + 4*y) x,y = mgrid[-7.:7.05:0.01, -5.:5.05:0.05] z = f(x,y) s = mmlab.contour_surf(x,y,z) mmlab.show() 

Salida esperada y el error:

Salida esperada: Una ventana de figura de Mayavi con la figura. Lo que veo en su lugar: el siguiente error de valor (estoy incluyendo la secuencia completa del mensaje para ser explícito) en la ventana de la consola:

————————– Principio del mensaje de error ——————

 Traceback (most recent call last): File "C:\PROGRAMSANDEXPERIMENTS\PYTHON\MayaviScripts\Learning\testMayavi.py", line 2, in  import mayavi.mlab as mmlab File "C:\Python27\lib\site-packages\mayavi\mlab.py", line 27, in  from mayavi.tools.camera import view, roll, yaw, pitch, move File "C:\Python27\lib\site-packages\mayavi\tools\camera.py", line 25, in  from engine_manager import get_engine File "C:\Python27\lib\site-packages\mayavi\tools\engine_manager.py", line 12, in  from mayavi.preferences.api import preference_manager File "C:\Python27\lib\site-packages\mayavi\preferences\api.py", line 4, in  from preference_manager import preference_manager File "C:\Python27\lib\site-packages\mayavi\preferences\preference_manager.py", line 29, in  from traitsui.api import View, Group, Item File "C:\Python27\lib\site-packages\traitsui\api.py", line 35, in  from .editors.api import (ArrayEditor, BooleanEditor, ButtonEditor, File "C:\Python27\lib\site-packages\traitsui\editors\__init__.py", line 22, in  from .api import (toolkit, ArrayEditor, BooleanEditor, ButtonEditor, File "C:\Python27\lib\site-packages\traitsui\editors\api.py", line 10, in  from .code_editor import CodeEditor File "C:\Python27\lib\site-packages\traitsui\editors\code_editor.py", line 36, in  class ToolkitEditorFactory ( EditorFactory ): File "C:\Python27\lib\site-packages\traitsui\editors\code_editor.py", line 48, in ToolkitEditorFactory mark_color = Color( 0xECE9D8 ) File "C:\Python27\lib\site-packages\traits\traits.py", line 487, in __call__ return self.maker_function( *args, **metadata ) File "C:\Python27\lib\site-packages\traits\traits.py", line 1183, in Color return ColorTrait( *args, **metadata ) File "C:\Python27\lib\site-packages\traitsui\toolkit_traits.py", line 7, in ColorTrait return toolkit().color_trait( *args, **traits ) File "C:\Python27\lib\site-packages\traitsui\toolkit.py", line 109, in toolkit _toolkit = _import_toolkit(ETSConfig.toolkit) File "C:\Python27\lib\site-packages\traitsui\toolkit.py", line 51, in _import_toolkit return __import__( name, globals=globals(), level=1 ).toolkit File "C:\Python27\lib\site-packages\traitsui\qt4\__init__.py", line 18, in  import pyface.qt File "C:\Python27\lib\site-packages\pyface\qt\__init__.py", line 35, in  prepare_pyqt4() File "C:\Python27\lib\site-packages\pyface\qt\__init__.py", line 17, in prepare_pyqt4 sip.setapi('QString', 2) ValueError: API 'QString' has already been set to version 1 

—————————- Fin del mensaje de error —————— –

Mi (s) entorno (s) son los siguientes:

Este problema se ha observado al menos en los siguientes dos entornos:

Entorno 1:

Descripción: Spyder y todos los demás componentes se instalaron utilizando la distribución Pythonxy (Py (x, y) -2.7.2.3.exe) en una máquina con Windows 7, 32 bits). Versión de Spyder: 2.1.9 Versión de Python: 2.7.2 (32 bits) Versión de Qt: 4.7.4, PyQt4 (API v1) 4.8.6 en la versión de Mayavi de Windows: 4.1.0

Ambiente 2:

Descripción: En una máquina separada que ejecuta Windows 7 de 64 bits, instalé la versión de 64 bits de la distribución EPD de Enthought. Por lo tanto, está ejecutando la versión 2.7.3 (x64) de la distribución de Python. Como el paquete EPD no incluye Spyder, instalé Spyder manualmente después de instalar PyQt GPLv4.9.4.
Versión de Spyder: 2.1.11 Versión de Python: 2.7.3 (64 bits) Versión de Qt: 4.8.2, PyQt4 (API v2) 4.9.4 en Windows Mayavi Versión: 4.2.0

Información Adicional:

Estoy seguro de que el código está bien, ya que la secuencia de comandos produce la salida esperada cuando se ejecuta en un entorno spyder “externo”. Por ejemplo, usando el shell de IPython.

Gracias.

Gracias Avaris por tu respuesta.

Tengo una solución por ahora (no estoy seguro de eso como una “solución”). Tools->Preferences->Console->External Modules->Enthought Tool Suite->ETS_TOOLKIT la siguiente configuración en Tools->Preferences->Console->External Modules->Enthought Tool Suite->ETS_TOOLKIT : cambio de Qt4 a wx . Después de cambiar esta configuración, puedo ejecutar código con la biblioteca de Mayavi y los gráficos de Mayavi directamente desde Spyder.

Para los usuarios de Linux, se puede hacer referencia a la respuesta de imranal en este tema .

simplemente agregue export ETS_TOOLKIT=qt4 a una nueva línea en ~/.bashrc hará el truco. ¡No olvides la source del archivo ~/.bashrc !

Según esto y esto, el error se puede Ignore API change errors (sip.setapi) checkbox Ignore API change errors (sip.setapi) en Preferences > Console > External Modules .

He probado que funciona con Spyder 2.1.11.