Ubuntuでpipを使ってgmshをインストールする方法を紹介する
OS | Windows 10 Home 64bit |
Ubuntu | 20.04 LTS |
OpenFOAM | v2006 |
gmshのインストール
gmshは,Ubuntu上でpipを使ってインストールすることができる
≫gmsh · PyPI
Ubuntuにはデフォルトでpythonがインストールされているが,このpythonを使ってインストールしてもうまくいかなかった
具体的にいうと,pythonのプログラム内でimport gmshを実行するとModuleNotFoundというエラーが出た
≫pipでモジュールを確かにインストールしたはずがModuleNotFoundErrorと出た時の解決法初心者的理解 – Qiita
原因を調べてみると,sys.pathに含まれているディレクトリにgmsh-4.6.0.dist-infoしかインストールされておらず,肝心のgmshがインストールできていなかった.(原因は不明)
途方に暮れてLinuxに造詣の深い友人に相談したところ,pythonはバージョンの違いにうるさく,ちょっとしたバージョンの違いでこういうエラーが起こると教えてもらった
というわけで,pythonの仮想環境を構築することにした
Pythonの仮想環境を構築する
仮想環境ってなんぞやとなったので調べてみると,次のような記事を見つけた
まとめると,
・pythonはバージョンが違うと動かないことがよくある
・PCに1つのバージョンのpythonしか入っていないと,いろいろなバージョンのpythonで書かれたプログラムに対応できない
・Pythonのライブラリを大量にインストールすると,それらが干渉しあって悪さすることがある
→作業をするディレクトリごとに適したバージョンのPythonを設定し,必要な分だけのライブラリをインポートした環境(=仮想環境)を作ろう!
ということらしい.
面倒くさい.FortranならgfortranをインストールしてPATHを設定するだけなのに
仮想環境を設定するために,次のサイトを参考にpyenvをインストールした
仮想環境でgmshをインストールする
実際に仮想環境を構築してgmshをインストールしてみる
≫pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法 – Qiita
まず,pyenvでインストールできるPythonのバージョンを確認する
/test$ pyenv install --list
Available versions:
2.1.3
2.2.3
(中略)
3.7.8
3.8.0
3.8-dev
3.8.1
3.8.2
3.8.3
(後略)
むちゃくちゃ長いリストが表示されるが,ここでは3.8.3をインストールする
ところが次のようなエラーが出てきた
/test$ pyenv install 3.8.3
Downloading Python-3.8.3.tar.xz...
-> https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
error: failed to download Python-3.8.3.tar.xz
BUILD FAILED (Ubuntu 20.04 using python-build 1.2.19-5-g0164e2bd)
/test$
わけがわからない
Linuxに造詣の深い友人のアドバイスをもとに,-vオプションをつけてやってみる
≫install コマンド – ファイルの権限などを設定してコピー _ Linuxコマンド.NET
/test$ pyenv install 3.8.3 -v
/tmp/python-build.20200711221713.915 /mnt/c/Users/mtk_m/OneDrive/Documents/OpenFOAM/test
Downloading Python-3.8.3.tar.xz...
-> https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
aria2c: /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /lib/x86_64-linux-gnu/libaria2.so.0)
error: failed to download Python-3.8.3.tar.xz
BUILD FAILED (Ubuntu 20.04 using python-build 1.2.19-5-g0164e2bd)
/test$
aria2c: /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6: version `GLIBCXX_3.4.26′ not found (required by /lib/x86_64-linux-gnu/libaria2.so.0) というエラー文が出てきた
なにやらC++に関するGLIBCXX_3.4.26というファイルがないらしい
≫libstdc++.so.6_ version `GLIBCXX_3.4.22′ not found – Qiita
このサイトを参考に,確認してみる
/test$ strings /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libs
tdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_DEBUG_MESSAGE_LENGTH
たしかにGLIBCXX_3.4.22までしかない
さらに調べてみると,同じようなエラーで苦しんで,解決した人を発見した
≫[OpenFOAM.com] openfoam v2006 wsl2 ubuntu 20.04 GLIBCXX_3.4.26 not found — CFD Online Discussion Forums
解決策は次の通り
≫GLIBCXX_3.4.26 not found in RCall – Usage – JuliaLang
GLIBCXX_3.4.26がないなら別の場所からコピーして持ってくればいいじゃない,という解決策.それでいいのかLinux
/usr/lib/x86_64-linux-gnu/の方を調べてみると普通にGLIBCXX_3.4.28まであったので,これをいただいてくることにした
/test$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
次のコマンドを実行する
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/
確認してみる
/test$ strings /opt/OpenFOAM/ThirdParty-v2006/platforms/linux64/gcc-6.3.0/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH
成功した
これでようやくpython3.8.3をインストールできる
/test$ pyenv install 3.8.3
(略)
/test$ pyenv local 3.8.3
/test$ python --version
Python 3.8.3
というわけで,仮想環境が構築できた
最後に,gmshをpipでインストールする
≫gmsh · PyPI
/test$ pip install --upgrade gmsh
Collecting gmsh
Using cached https://files.pythonhosted.org/packages/1d/ed/372df81ed068fbee7dfbdcca391168dcc30e34b1bd016066625330d9362a/gmsh-4.6.0.tar.gz
Installing collected packages: gmsh
Running setup.py install for gmsh ... done
Successfully installed gmsh-4.6.0
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
/test$
本当にできているか確認してみる
/test$ gmsh -version
4.6.0
/test$
きちんと最新バージョンがインストールできている
Pythonのインタラクティブシェルでgmshをimportしてみる
/test$ python
Python 3.8.3 (default, Jul 11 2020, 22:44:23)
[GCC 6.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gmsh
>>> exit()
/test$
問題なくimportできた
これでgmshのインストールは完了である
まとめ
Ubuntuでpipを使ってgmshをインストールすることができた
まあこの記事で大事なことは「持つべきものはLinuxに造詣の深い友人」ってこと
ありがとう
コメント