在Qt4上安装MayaVi导致段错误

1 投票
1 回答
2206 浏览
提问于 2025-04-17 04:03

我正在尝试在我的电脑上安装MayaVi。我用的是一台MacBook Air,操作系统是OS X 10.6.8,内存4GB。

我的Python和大部分软件包都是通过Homebrew或pip安装的。特别是Python 2.7、ipython、Qt4、numpy、scipy、vtk等都是这样安装的。VTK是通过Homebrew安装的,使用了--python和--qt-extern的选项,所有的安装都没问题。我没有安装wxPython,因为我尝试通过pip、手动构建或者使用二进制文件都没成功。

如果我运行ipython -q4thread,就无法成功执行from mayavi import mlab,因为我遇到了一个错误,跟使用了两个不同的PyQt API有关: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,然后GUI就会弹出来。当我这样做时,得到以下输出:

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

虽然GUI确实弹出来了,但如果我尝试进行任何操作,就会出现段错误。

如果你有任何关于如何排查这个问题的想法,或者关于如何成功重新安装这个软件包的建议,请告诉我。

谢谢!

Uri

1 个回答

1

我也有一台运行OS X 10.7.4(狮子系统)的MacBook Air。去年二月份我花了很多时间让mayavi这个工具正常工作,最终成功地生成了一些科学图表。不过,这并不意味着所有的示例和测试都能正常运行,界面也会在控制台里显示很多错误信息,但大多数时候并不会崩溃。现在,我的Python安装坏掉了(可能是因为升级了numpy),所以我需要重新安装。可惜的是,六个月后情况并没有变得更简单!

目前仍然没有合适的预编译版本。我试过从这里下载Enthought Python Distribution:http://www.enthought.com/repo/.epd_academic_installers。但是Mac上仍然没有64位的版本,里面的组件都很老旧,基于wxPython的mayavi看起来很丑,而且反应慢。于是我又回到了brewpip。经过很多次的尝试和错误,以下是我找到的比较有效的方法:

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 Python

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 .

如果EPD已经安装,还需要在/Library/Frameworks/Python.framework/Versions中做同样的操作,否则EPD会优先使用。

2.2 Numpy

从源代码安装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, pyqt, vtk

安装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这个选项不是绝对必要的,但加上也没坏处。

接下来,从http://www.vtk.org/files/release/5.10/vtkdata-5.10.0.tar.gz下载vtk数据,解压到某个地方,并让VTK_DATA_ROOT环境变量指向VTKData目录。在

/usr/local/share/vtk/Examples

中运行一些示例,使用python <example>.py启动python示例,使用vtk <example.tcl>启动TCL示例。效果非常好,对吧?接下来看看mayavi是怎么搞砸这一切的...

2.4 ETS和mayavi

虽然

pip install mayavi

能让你走得更远,但它似乎比从github安装最新版本更容易崩溃。获取https://github.com/enthought/ets/raw/master/ets.py并运行

python ets.py clone

来克隆ETS的git仓库。你只需要apptoolsmayavipyfacetraitstraitsui,如果你想从命令行运行mayavi2,可能还需要envisage。所以删除其他目录,然后执行

python ets.py develop

这应该能让你在mayavi/examples/tvtkmayavi/examples/mayavi中运行一些示例,使用python <example>.py并玩玩界面。虽然会有很多控制台错误和一些界面功能无法使用,比如选择LUT表,但希望不会崩溃。

2.5 scipy, matplotlib, 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

接着使用pip安装ipython(0.13)。对于qtconsole,先安装:

pip install pygments
pip install pyzmq

然后

pip install ipython

有几种可能的方式来启动ipython以便与mayavi一起使用,这取决于谁控制QT事件循环:

  • ipython不带mlab.show():会卡住。
  • ipythonmlab.show():可以工作,但提示符可能会变得无响应。
  • ipython --gui=qtipython --pylab=qt:可以工作,但“保存”对话框会立即关闭。
  • ipython qtconsole不带mlab.show():会卡住。
  • ipython qtconsolemlab.show():可以工作。
  • ipython qtconsole --gui=qtipython qtconsole --pylab=qt:可以工作。

祝你好运!

撰写回答