Установка MayaVi на Qt4 приводит к ошибкам сегментации

Я пытаюсь установить MayaVi на свой компьютер. У меня MacBook Air с OS X 10.6.8, 4 ГБ ОЗУ.

Мой python и большая часть моего стека построены через Homebrew или pip. В частности, это верно для python2.7, ipython, Qt4, numpy, scipy, vtk и т. д. VTK был установлен с флагами --python и --qt-extern в Homebrew, и все сборки были в порядке. У меня не установлен wxPython, так как мне не удалось заставить его работать с помощью pip, ручной сборки или двоичных файлов.

Если я запускаю ipython -q4thread, я не могу успешно выполнить from mayavi import mlab, так как получаю сообщение об ошибке, связанное с использованием двух разных API для PyQt: http://groups.google.com/group/spyderlib/browse_thread/thread/36a35baec74ca144

Однако, если я запущу только ipython, я смогу успешно запустить from mayavi import mlab. Затем я пытаюсь следовать этому примеру: http://github.enthought.com/mayavi/mayavi/example_using_with_scipy.html, который включает следующие команды:

import numpy as np

def V(x, y, z):
    """ A 3D sinusoidal lattice with a parabolic confinement. """
    return np.cos(10*x) + np.cos(10*y) + np.cos(10*z) + 2*(x**2 + y**2 + z**2)

X, Y, Z = np.mgrid[-2:2:100j, -2:2:100j, -2:2:100j]

from mayavi import mlab
mlab.contour3d(X, Y, Z, V)

Все это работает нормально, и я получаю всплывающее окно, и я могу вращать 3D-график и т. д. Однако затем я нажимаю на значок, чтобы открыть конвейер, который открывает другое окно. Затем в учебнике предлагается дважды щелкнуть «изоповерхность», чтобы изменить ее свойства. Как только я это делаю, я получаю воспроизводимую ошибку сегментации.

Я понятия не имею, как начать выяснять, в чем проблема.

В качестве альтернативы я могу запустить MayaVi из командной строки: mayavi2, и появится графический интерфейс. Когда я это делаю, я получаю следующий вывод:

Warning: Unable to import the wx backend for pyface due to traceback: Traceback (most recent call last):
      File "/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/pyface/toolkit.py", line 45, in _init_toolkit
        be = import_toolkit(tk)
      File "/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/pyface/toolkit.py", line 31, in import_toolkit
        __import__(be + 'init')
      File "/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/pyface/ui/wx/init.py", line 14, in <module>
        import wx
    ImportError: No module named wx

Хотя графический интерфейс всплывает, если я пытаюсь выполнить какую-либо операцию, я получаю segfault.

Пожалуйста, дайте мне знать, если у вас есть какие-либо мысли по устранению этой неполадки или, возможно, руководство по успешной переустановке пакета.

Спасибо!

Ури


person Uri Laserson    schedule 11.10.2011    source источник


Ответы (1)


У меня также есть MacBook Air с OS X 10.7.4 (Lion). Еще в феврале я потратил много времени на то, чтобы заставить Mayavi работать, и в конце концов преуспел в том, что смог создавать научные графики. Это по-прежнему означает, что некоторые примеры и тесты не будут работать правильно, а графический интерфейс выдаст множество сообщений об ошибках в консоли, но не вылетит (в большинстве случаев). Теперь мне удалось сломать мою установку Python (вероятно, путем обновления numpy), поэтому мне нужно было переустановить. Увы, через 6 месяцев легче не стало!

До сих пор нет жизнеспособного предварительно скомпилированного варианта. Я попробовал дистрибутив Enthought Python отсюда: http://www.enthought.com/repo/.epd_academic_installers< /а>. До сих пор нет 64-битной версии с ETS для Mac, компоненты старые, Mayavi на основе wxPython выглядит уродливо и кажется медленным и неотзывчивым. Итак, вернемся к brew и pip. После долгих проб и ошибок вот что более-менее сработало:

1. Предпосылки

Скрыть/удалить неработающую установку Homebrew Python:

mv /usr/local/lib/python2.7/site-packages /usr/local/lib/python2.7/site-packages-old 
mv /usr/local/share/python /usr/local/share/python-old
brew uninstall python pyqt pyside vtk

Из Xcode (4.4.1) выберите llvm-gcc в качестве компилятора (у меня был меньший успех с clang):

cd /usr/bin
sudo rm cc c++
sudo ln -s gcc cc
sudo ln -s g++ c++

2. Установка

2.1 Питон

brew install python --framework --universal

Укажите на новую установку:

cd /System/Library/Frameworks/Python.framework/Versions
rm Current
ln -s /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/Current .

Если ЭПД установлен, необходимо сделать то же самое в /Library/Frameworks/Python.framework/Versions, иначе ЭПД будет иметь приоритет.

2.2 Нампи

Установите numpy из исходного кода (в настоящее время pip 1.2 не устанавливает npymath.ini правильно, что приведет к сбою сборки scipy):

git clone https://github.com/numpy/numpy.git
cd numpy
git checkout v1.6.2
python setup.py install

Поскольку так много пакетов ссылаются на numpy, я действительно рекомендую проверить официальную версию 1.6.2 на сегодняшний день. Затем сделайте видимыми заголовки numpy:

cd /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/include/python2.7
ln -s /usr/local/lib/python2.7/site-packages/numpy/core/include/numpy .

2,3 кварт, пиккварт, втк

Установите qt (4.8.2) и pyqt (4.9.4):

brew install qt
brew install pyqt

Также можно установить pyside (1.1.1)

brew install pyside

но это похоже, приводит к большему количеству сбоев с mayavi. В любом случае добавляйте

export QT_API=pyqt

на .bashrc, чтобы избежать путаницы. Далее устанавливаем vtk (5.10.0; 5.8.0 тоже работает)

brew install vtk --python --tcl --examples --qt

...и ждите (компиляция занимает около 40 минут). Флаг --qt не является строго обязательным, но и не вредит.

Затем загрузите данные vtk с http://www.vtk.org/files/release/5.10/vtkdata-5.10.0.tar.gz, распакуйте куда-нибудь и сделайте так, чтобы переменная среды VTK_DATA_ROOT указывала на каталог VTKData. Запустите несколько примеров в

/usr/local/share/vtk/Examples

Запустите примеры Python с python <example>.py и примеры TCL с vtk <example.tcl>. Работает абсолютно красиво, правда? Итак, давайте посмотрим, как Mayavi все испортит дальше...

2.4 ETS и майави

Несмотря на то что

pip install mayavi

куда-то вас приведет, похоже, это приводит к большему количеству сбоев, чем установка переднего края с github. Получите https://github.com/enthought/ets/raw/master/ets.py и запустите

python ets.py clone

для клонирования репозитория ETS git. Вам нужны только apptools, mayavi, pyface, traits и traitsui, возможно, envisage, если вы хотите запустить mayavi2 из командной строки. Поэтому удалите другие каталоги и сделайте

python ets.py develop

Это должно позволить вам запустить некоторые примеры из репозитория в mayavi/examples/tvtk и mayavi/examples/mayavi, запустив python <example>.py и поэкспериментировав с графическим интерфейсом. Существует множество ошибок консоли и множество функций графического интерфейса, которые не работают, например, выбор таблицы LUT. Но надеюсь не рухнет.

2.5 scipy, матплотлиб, ipython

Я предпочитаю получать передовые решения от github для scipy и matplotlib. Сначала установите все зависимости, используя brew. затем

git clone https://github.com/scipy/scipy.git
cd scipy
python setup.py install

git clone https://github.com/matplotlib/matplotlib.git
cd matplotlib
python setup.py install

Затем установите ipython (0.13), используя pip. Сначала установите qtconsole:

pip install pygments
pip install pyzmq

тогда

pip install ipython

Есть несколько возможных способов запустить ipython для использования с mayavi, в зависимости от того, кто управляет циклом обработки событий QT:

  • ipython без mlab.show(): зависает.
  • ipython с mlab.show(): работает, но подсказка может перестать отвечать.
  • ipython --gui=qt или ipython --pylab=qt: Работает, но диалоговое окно «Сохранить» сразу закрывается.
  • ipython qtconsole без mlab.show(): зависает.
  • ipython qtconsole с mlab.show(): Работает.
  • ipython qtconsole --gui=qt или ipython qtconsole --pylab=qt: работает.

Удачи!

person Stefan    schedule 09.09.2012