在Qt4上安装MayaVi导致段错误
我正在尝试在我的电脑上安装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 个回答
我也有一台运行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看起来很丑,而且反应慢。于是我又回到了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 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仓库。你只需要apptools
、mayavi
、pyface
、traits
和traitsui
,如果你想从命令行运行mayavi2
,可能还需要envisage
。所以删除其他目录,然后执行
python ets.py develop
这应该能让你在mayavi/examples/tvtk
和mayavi/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()
:会卡住。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
:可以工作。
祝你好运!