From mayavi import mlab error

I am trying to use Mayavi in IPython (terminal at the moment) and am running into issues that are surprising me in light of the documentation on this issue.

Specifically, following this page: http://ipython.readthedocs.io/en/stable/interactive/reference.html#pyqt-and-pyside

I have done

[mlw-mbair ~]$ QT_API=pyqt ipython -gui qt

but importing mayavi fails:

In [1]: from mayavi import mlab – ValueError Traceback (most recent call last) <ipython-input-1-3f0e4b94a8ea> in <module>() -> 1 from mayavi import mlab /Users/mwaskom/anaconda/lib/python2.7/site-packages/mayavi/mlab.py in <module>() 25 26 # Mayavi imports -> 27 from mayavi.tools.camera import view, roll, yaw, pitch, move 28 from mayavi.tools.figure import figure, clf, gcf, savefig, 29 draw, sync_camera, close, screenshot /Users/mwaskom/anaconda/lib/python2.7/site-packages/mayavi/tools/camera.py in <module>() 23 # We can’t use gcf, as it creates a circular import in camera management 24 # routines. -> 25 from .engine_manager import get_engine 26 27 /Users/mwaskom/anaconda/lib/python2.7/site-packages/mayavi/tools/engine_manager.py in <module>() 10 11 # Local imports -> 12 from mayavi.preferences.api import preference_manager 13 from mayavi.core.registry import registry 14 from mayavi.core.engine import Engine /Users/mwaskom/anaconda/lib/python2.7/site-packages/mayavi/preferences/api.py in <module>() 2 3 # The global PreferenceManager instance -> 4 from .preference_manager import preference_manager 5 from .bindings import set_scene_preferences, get_scene_preferences /Users/mwaskom/anaconda/lib/python2.7/site-packages/mayavi/preferences/preference_manager.py in <module>() 27 from traits.etsconfig.api import ETSConfig 28 from traits.api import HasTraits, Instance -> 29 from traitsui.api import View, Group, Item 30 from apptools.preferences.api import (ScopedPreferences, IPreferences, 31 PreferencesHelper) /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/api.py in <module>() 34 35 try: -> 36 from .editors.api import ArrayEditor 37 except ImportError: 38 # ArrayEditor depends on numpy, so ignore if numpy is not present. /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/editors/__init__.py in <module>() 21 22 try: -> 23 from .api import ArrayEditor 24 except ImportError: 25 pass /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/editors/api.py in <module>() 22 from .button_editor import ButtonEditor 23 from .check_list_editor import CheckListEditor -> 24 from .code_editor import CodeEditor 25 from .color_editor import ColorEditor 26 from .compound_editor import CompoundEditor /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/editors/code_editor.py in <module>() 34 #- 35 -> 36 class ToolkitEditorFactory ( EditorFactory ): 37 “”” Editor factory for code editors. 38 “”” /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/editors/code_editor.py in ToolkitEditorFactory() 46 47 # Background color for marking lines -> 48 mark_color = Color( 0xECE9D8 ) 49 50 # Object trait containing the currently selected line (optional) /Users/mwaskom/anaconda/lib/python2.7/site-packages/traits/traits.pyc in __call__(self, *args, **metadata) 520 521 def __call__ ( self, *args, **metadata ): -> 522 return self.maker_function( *args, **metadata ) 523 524 class TraitImportError ( TraitFactory ): /Users/mwaskom/anaconda/lib/python2.7/site-packages/traits/traits.pyc in Color(*args, **metadata) 1234 from traitsui.toolkit_traits import ColorTrait 1235 -> 1236 return ColorTrait( *args, **metadata ) 1237 1238 Color = TraitFactory( Color ) /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/toolkit_traits.pyc in ColorTrait(*args, **traits) 5 6 def ColorTrait ( *args, **traits ): -> 7 return toolkit().color_trait( *args, **traits ) 8 9 def RGBColorTrait ( *args, **traits ): /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/toolkit.pyc in toolkit(*toolkits) 159 try: 160 with provisional_toolkit(toolkit_name): -> 161 _toolkit = _import_toolkit(toolkit_name) 162 return _toolkit 163 except (AttributeError, ImportError) as exc: /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/toolkit.pyc in _import_toolkit(name) 81 82 def _import_toolkit ( name ): -> 83 return __import__( name, globals=globals(), level=1 ).toolkit 84 85 /Users/mwaskom/anaconda/lib/python2.7/site-packages/traitsui/qt4/__init__.py in <module>() 16 # import pyface.qt before anything else is done so the sipapi 17 # can be set correctly if needed -> 18 import pyface.qt 19 20 #- /Users/mwaskom/anaconda/lib/python2.7/site-packages/pyface/qt/__init__.py in <module>() 38 39 elif qt_api == ‘pyqt’: -> 40 prepare_pyqt4() 41 42 elif qt_api != ‘pyside’: /Users/mwaskom/anaconda/lib/python2.7/site-packages/pyface/qt/__init__.py in prepare_pyqt4() 15 # Set PySide compatible APIs. 16 import sip -> 17 sip.setapi(‘QDate’, 2) 18 sip.setapi(‘QDateTime’, 2) 19 sip.setapi(‘QString’, 2) ValueError: API ‘QDate’ has already been set to version 1

Based on the docs I thought QT_API would use PyQT API v2 and thus be compatible with mayavi.

I am not, to my knowledge, importing anything else that would be setting the QT API ahead of time; i.e. my ipython startup file is pretty clean:

[mlw-mbair ~]$ grep ‘^w’ ~/.ipython/profile_default/ipython_config.py c = get_config() c.TerminalIPythonApp.display_banner = False c.TerminalIPythonApp.display_banner = False c.TerminalInteractiveShell.separate_in = ” c.TerminalInteractiveShell.colors = ‘Linux’

I am using an up-to-date version of IPython:

[mlw-mbair ~]$ python -c “import IPython; print(IPython.sys_info())” {‘commit_hash’: u’5a894b9′, ‘commit_source’: ‘installation’, ‘default_encoding’: ‘UTF-8’, ‘ipython_path’: ‘/Users/mwaskom/anaconda/lib/python2.7/site-packages/IPython’, ‘ipython_version’: ‘5.3.0’, ‘os_name’: ‘posix’, ‘platform’: ‘Darwin-13.4.0-x86_64-i386-64bit’, ‘sys_executable’: ‘/Users/mwaskom/anaconda/bin/python’, ‘sys_platform’: ‘darwin’, ‘sys_version’: ‘2.7.12 |Anaconda 2.3.0 (x86_64)| (default, Jul 2 2016, 17:43:17) n[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]’}

and (as I think this might be relevant) matplotlib:

[mlw-mbair ~]$ python -c “import matplotlib; print(matplotlib.__version__)” 2.0.0

This used to work for me in the past, but various things have been updated since. I’m not sure if something has broken, or that section of the docs have gone stale, or I’m simply doing something wrong.

Related Posts