Description
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.