Ошибка Python/Mayavi/VTK: импортированная версия VTK не соответствует классам TVTK
Когда я использую Mayavi (4.3.1) для визуализации меша, он выдает следующее предупреждение:
ВНИМАНИЕ: Импортированная версия VTK (5.1) не соответствует той, которая использовалась для построения классов TVTK (6.3). Это может вызвать проблемы. Пожалуйста, восстановите TVTK.
Моя система: MS Windows 7 64bit, Anaconda 4.3.1 (последняя версия),
<code>
$ conda list qt
# packages in environment at C:\ProgramData\Anaconda2:
#
pyqt 4.11.4 py27_7 anaconda
qt 4.8.7 vc9_9 [vc9] anaconda
qtawesome 0.4.3 py27_0
qtconsole 4.2.1 py27_0 anaconda
qtpy 1.2.1 py27_0
$ conda list vtk
# packages in environment at C:\ProgramData\Anaconda2:
#
vtk 5.10.1 py27_0 anaconda
$ conda list mayavi
# packages in environment at C:\ProgramData\Anaconda2:
#
mayavi 4.5.0 <pip>
</code>
Я искал форумы, но большинство ответов расценили это как ошибку в VTK 4 года назад, например, Ошибка TVTK в Mayavi (Python). Я не уверен, что у него есть решительное решение. На моем компьютере действительно есть другая версия VTK (версия>6), но она на C++ и не имеет ничего общего с python и Mayavi.
Ошибка, с которой я столкнулся, произошла, когда я запустил пример кода Maya, как показано ниже (предупреждающее сообщение очень запутанное, поскольку у меня VTK 5.10 (как выше), и странно, где версия 5.1),
<code>
>>> runfile('D:/flex_8state/code/spherical_harmonics.py', wdir='D:/flex_8state/code')
********************************************************************************
WARNING: Imported VTK version (5.1) does not match the one used
to build the TVTK classes (6.3). This may cause problems.
Please rebuild TVTK.
********************************************************************************
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "D:/flex_8state/code/spherical_harmonics.py", line 36, in <module>
mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0, 0, 0), size=(400, 300))
File "C:\ProgramData\Anaconda2\lib\site-packages\mayavi\tools\figure.py", line 85, in figure
engine.new_scene(name=name, size=size)
File "C:\ProgramData\Anaconda2\lib\site-packages\apptools\scripting\recordable.py", line 45, in _wrapper
result = func(*args, **kw)
File "C:\ProgramData\Anaconda2\lib\site-packages\mayavi\core\engine.py", line 452, in new_scene
viewer = self.scene_factory(**factory_kwargs)
File "C:\ProgramData\Anaconda2\lib\site-packages\mayavi\core\ui\mayavi_scene.py", line 89, in viewer_factory
viewer.open()
File "C:\ProgramData\Anaconda2\lib\site-packages\pyface\i_window.py", line 166, in open
self._create()
File "C:\ProgramData\Anaconda2\lib\site-packages\pyface\ui\qt4\application_window.py", line 121, in _create
contents = self._create_contents(self.control)
File "C:\ProgramData\Anaconda2\lib\site-packages\tvtk\tools\ivtk.py", line 404, in _create_contents
self.scene = self._scene_factory(parent)
File "C:\ProgramData\Anaconda2\lib\site-packages\mayavi\core\ui\mayavi_scene.py", line 68, in mayavi_scene_factory
s = MayaviScene(parent, stereo=p['stereo'])
File "C:\ProgramData\Anaconda2\lib\site-packages\tvtk\pyface\ui\qt4\decorated_scene.py", line 59, in __init__
super(DecoratedScene, self).__init__(parent, **traits)
File "C:\ProgramData\Anaconda2\lib\site-packages\tvtk\pyface\ui\qt4\scene.py", line 325, in __init__
self.picker = picker.Picker(self)
File "C:\ProgramData\Anaconda2\lib\site-packages\tvtk\pyface\picker.py", line 260, in __init__
configure_input(self.p_mapper, self.p_source)
File "C:\ProgramData\Anaconda2\lib\site-packages\tvtk\common.py", line 88, in configure_input
inp.input = op.output
File "C:\ProgramData\Anaconda2\lib\site-packages\traits\trait_handlers.py", line 104, in _read_only
name, class_of( object ) )
traits.trait_errors.TraitError: The 'input' trait of a PolyDataMapper instance is 'read only'.
</code>
1 ответ
После 3-дневного жесткого устремления, я нашел обходной путь, и я отправил здесь, которые было бы полезно для подобных жертв. Я настоятельно рекомендовал разработчикам Mayavi/TVTK уделять больше внимания этой ошибке.
Этот пост мне очень помог, https://github.com/ContinuumIO/anaconda-issues/issues/1510. Та же первоначальная установка, а затем обновление (мой начальный пост) VTK с 5 до 6, как указано в https://repo.continuum.io/pkgs/free/win-64/. Внутренняя ошибка коренится в измененном интерфейсе SetInputConnection/SetInputData в версиях Python / VTK.
Основные проблемы
- В моем ноутбуке такая же установка (как в предыдущем посте) действительно работает. Я не знаю почему.
- На моем ПК, до того как я нашел обходной путь, когда я непосредственно установил VTK-6 с помощью conda, он не работал и выдает "... отсутствующие модули" (извините, я не записывал эти ошибки).