Python3 安裝 VTK 和 MayaVi 的一種姿勢

有朋友反映遇到了下面這種錯誤:

Fatal Python error: PyThreadState_Get: no current thread

Abort trap: 6

我也遇到過,當時我的解決方案是設置使用清華 tuna 的 anaconda 源,然後 conda update --all , conda grade --all,之後就搞定了。

當然了,如果你也用 Pyenv,並且也是 macOS High Sierra 操作系統,那麼你也可以下載我打包好的 anaconda3 這個壓縮包,解壓縮之後放到 ~/.pyenv/versions/ 目錄下,然後就可以用 pyenv 來管理設置激活這個我打包好的環境了。

裡面有完好的 vtk 和 PyQt5,兩者都可用。

另外的一個 Kivy3.app 則是 基於 Python3.5.4 進行的打包,內中也安裝了 vtk 和 PyQt5,使用方法可以參考:Kivy 中文安裝指南(Mac系統)

鏈接: pan.baidu.com/s/1dF4gkX 密碼: c8qs


本文基於我之前的一個回答:CycleUser:anaconda上能否安裝VTK?

友情提示:由於使用到了 conda,所以如果不指定使用國內 ustc 或者tuna 的 anaconda 源,就可能需要科學的上網姿勢才能安裝成功。但請不要問我如何使用科學的姿勢,因為我不具備這方面的知識。


思路簡介

在 Python 上面安裝配置 VTK 和 MayaVi,可能對於新手來說,是一個比較痛苦的經歷。

我今天正好探索 SfePy,發現似乎是要用到 VTK 和 MayaVi ,而剛剛用 pyenv 新建的 3.6.3的環境是沒有安裝這兩個的。直接用 pip install mayavi 會提示缺少 VTK 而報錯,我在 macOS 下用 brew install vtk 和 brew link vtk 之後並沒有見到效果,所以就想到了用 conda 安裝 vtk,然後再用 pip 安裝 mayavi 的思路。

這次的場景和我在 Anaconda 上安裝 VTK 的回答 還有所不同,因為原本安裝的並不是 Anaconda,而就是常規的普通 Python 3.6.3。

當然,這對於萬事能湊活就先對付為人生哲學的我來說,不算太大的難事,因為咱們完全可以用下面這個方案來實現:

  1. 用 pip 來給已有的 Python 3.6.3 安裝一個 conda;
  2. 然後用這個 conda 再去安裝 VTK;
  3. 接下來安裝好了 VTK 之後再用 pip 安裝 MayaVi;
  4. 然後再用 conda 安裝 SfePy。

我實際按照這個思路操作了一遍,在 Python 3.5.4 和 3.6.3 上都成功了,當然這兩者稍有一點差別,就是在使用 conda 安裝 VTK 的時候要指定使用不同的 channel,對於3.5.4,要用 menpo,對於 3.6.3 ,要用 clinicalgraphics,這一點就和我在 Anaconda 上安裝 VTK 的回答 中寫的情況類似了。


1 用 pip 安裝 conda

有經驗的朋友可能看了上面的 1234 之後就知道該怎麼做了,甚至自己完全還有更好的思路能夠分享出來。然而本專欄定位是從入門開始的學習者,所以我覺得有必要把這部分詳細列出來介紹一下。

(這裡假設你已經安裝好了 pip,如果這部分有問題,請去搜索,相信這點問題難不住有探索精神的學習者。我這裡用的 pip3 而不是 pip,是為了區分我同時安裝的 Python2 所用的 pip 和 Python3 所用的 pip3,建議新人們只安裝 Python3 就好了。如果下面的代碼中使用 pip3 不成,你替換成 pip 試試又不會得病。)

首先,我們用 PIP 來安裝 conda。

pip3 install condan

這一步驟中如果有出錯提示,可能是一些 conda 必備的依賴包沒有安裝。可能為 ruamel.yaml, pycosat, idna, certifi, chardet, urllib3, requests 這幾個。

可以嘗試一起裝:

pip3 install ruamel.yaml pycosat idna certifi chardet urllib3 requests condan

這好辦,如果一下安裝報上面這些包的錯,那就一個個用 pip 來安裝了就可以了,不再贅述。

2 用 conda 安裝 VTK

這裡就是到了一個稍微關鍵一點的地方,3.5 要用 menpo,3.6要用 clinicalgraphics。

另外,由於咱們是在 Python 中使用 pip 安裝的 conda,而不是一開始安裝的 miniconda 或者 anaconda,所以不能直接使用 conda 命令,而是要當作一個 python 模塊來用,所以下面的幾個命令裡面,都加上了 python3 -m,這也是和我在 Anaconda 上安裝 VTK 的回答 很不一樣的,新手可能會對此不太注意,從而導致安裝錯誤,所以一定仔細閱讀哦。

適用於3.5:

python3 -m conda install -c menpo vtk=7 n

適用於3.6:

python3 -m conda install -c clinicalgraphics vtk=7.1.0 n

關於版本的指定上,建議你也按照下面的來,避免自己走彎路,我雖然不算老司機,但這些代碼都好歹是安裝成功過的。我當然知道 VTK 官方版本最新的 Release 已經 8.01 了,但是我自己沒弄成功,就沒辦法來分享安裝最新版的成功經驗了。

3 安裝好了 VTK 之後再用 pip 安裝 MayaVi

剛這一步安裝好了 VTK 之後,就可以用 pip 來安裝 MayaVi 了。

pip3 install mayavin

4 再用 conda 安裝 SfePy

我安裝 MayaVi 是為了 安裝 SfePy,所以上面的弄妥了之後自然直接安裝了:

python3 -m conda install -c conda-forge sfepyn

當然了,每一步安裝完成之後,都建議你測試一下是否安裝成功,在 Bash 或者 CMD 等終端內運行

python3 -c "import vtk" #這是測試 VTK npython3 -c "import mayavi" #這是測試 MayaVi npython3 -c "import sfepy" #這是測試 sfepyn

如果沒什麼問題,就不會有報錯什麼的。另外注意是在終端內運行,不是在 Python 解釋器裡面。這幾個命令實際上就是讓 Python3 來導入這幾個模塊,來看看是不是報錯,沒報錯就一般都是安裝完畢沒問題咯。

其實 conda 還有個好處,就是可以用來升級已經安裝的模塊,可以在終端內輸入如下命令來實現:

python3 -m conda update --alln

跟直接使用 Anaconda 相比,也就是多加了前綴 python3 -m 而已。

這一期就是這樣,希望新手朋友們看了之後能夠大概弄清楚如何安裝 VTK 和 MayaVi。


推薦閱讀:

TAG:Python | VTK | Anaconda |