【gmsh v4.6.0】gmshのインストール

Ubuntuでpipを使ってgmshをインストールする方法を紹介する

OSWindows 10 Home 64bit
Ubuntu20.04 LTS
OpenFOAMv2006

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の仮想環境まとめ _ CodeCampus

まとめると,

・pythonはバージョンが違うと動かないことがよくある
・PCに1つのバージョンのpythonしか入っていないと,いろいろなバージョンのpythonで書かれたプログラムに対応できない
・Pythonのライブラリを大量にインストールすると,それらが干渉しあって悪さすることがある

→作業をするディレクトリごとに適したバージョンのPythonを設定し,必要な分だけのライブラリをインポートした環境(=仮想環境)を作ろう!

ということらしい.

面倒くさい.FortranならgfortranをインストールしてPATHを設定するだけなのに

仮想環境を設定するために,次のサイトを参考にpyenvをインストールした

pyenvまとめ – Qiita

仮想環境で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に造詣の深い友人」ってこと

ありがとう

Sponsored Link

コメント

タイトルとURLをコピーしました