1/31日常
最近はやりのmaterials informaticsの波にちょっと乗ろうと思い、pythonにpymatgenライブラリを入れてみた。
輸送特性で遊びたかったのでBoltzTraP2というモジュール(公式サイトと日本語紹介サイト)をインストールしようとしたのだが、なぜかうまく行かなかった。
解決方法に関して、備忘録を兼ねてここにメモしておこうと思う。
最初はOSがWindows10、Anaconda promptを使ってインストールを試みた。
日本語紹介サイトにはUnix/Linuxで要コンパイルって書いてあるけど、無根拠に何とかなるんじゃないかと思っていた(失敗したが)。
pip install BoltzTraP2を実行したところ、途中でcmakeとかmakeができませんみたいなエラーがでたので、C++コンパイルのためにVisual Studioを入れたり、CMakeというフリーソフトウェアを入れたり、windowsでもmakeできる(らしい)ソフトを入れたりした。よくわからんモジュールも入れた気がする…。
そうして四苦八苦したが、結局Windowsではどうにもならなかったので、Linuxに頼ることにした。ありがたいことに、Windows10ではOSを切り替えなくてもWindows Subsystem for Linux (WSL)とかいうやつでLinuxが使えるらしいので、それを使った。
「コントロールパネル」→「プログラム」→「Windowsの機能の有効化または無効化(画面右側)」をクリック→「Windows Subsystem for Linux」にチェック→OK→再起動
で準備完了。
Microsoft StoreからUbuntuをインストール。やや時間がかかった。
名前とパスワードを設定したあと、環境設定を開始。こちらのサイトを参考に、環境設定を行った。UbuntuにはPythonがプレインストールされているらしい。リンク先がなくなったら困るので以下簡単にコマンドのみ抜粋しておく。
sudo apt update
sudo apt -y upgrade
システムの更新およびアップグレード
python3 -V
バージョン確認
sudo apt install -y python3-pip
pipインストール
sudo apt install -y build-essential libssl-dev libffi-dev python3-dev
重要なビルドツール・開発ツール(よくわからない)
sudo apt install -y python3-venv
venvモジュールインストール
mkdir environments
cd environments
仮想環境を配置するディレクトリを生成・移動
python3 -m venv my_env
仮想環境構築
source my_env/bin/activate
仮想環境をアクティベートする
こうして作った仮想環境内では、pip3じゃなくてpipコマンドでもだいたいの場合動作するらしい。
続いて、仮想環境の中にマテインフォ関連のライブラリ等をインストールする。
仮想環境をアクティベートさせたまま、以下のライブラリやらモジュールやらをインストールする。順番に、
pymatgen
ipykernel
ipython kernel install --user --name=(カーネルのなまえ)
(jupyter notebookで仮想環境のカーネルを使いたいため。デフォルトだと仮想環境でない方(base)を参照してしまう。)
tqdm
pyfftw
(wheel?)
(この3つはBoltzTraP2のインストールに必要っぽい。wheelは警告が出たら足せばいいかも)
BoltzTraP2
仮想環境の外(base)に戻ってjupyter notebookをインストール。その後jupyter notebookを起動しようとしたが、ブラウザが立ち上がらない。加えて、CUIの文字が消えるので何が起こっているのか分からない。PCの詳しい所をぜんぶすっ飛ばしてやっているので原因も分からない。
とりあえず対症療法でこちらのサイトを参考に
env BROWSER="/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" jupyter notebook
でブラウザを立ち上げた。文字が消える問題は、
jupyter notebook --generate-config
で設定ファイルを作成し、~/.jupyter/jupyter_notebook_config.pyにある設定ファイルをテキストエディタで開いた後、いちばんうえに
c.NotebookApp.use_redirect_file = False
を付け足すことで解決した。
jupyter notebookを開くと、CUIにローカルのパス(http://localhost:8888...)が表示されるので、これをchromeなりなんなりのURL窓に張り付けると対象のフォルダに移動できる。
これでだいたい終わり。
終わった後にBoltzTraP2を使って計算してみたが、うまく動いてくれた。
長い闘いだったが何とかなってよかった。PCの勉強をしないといけないと思った。
終わってから、簡単なものならGoogle Colabを使えばもっと楽なのだったのではないかと気付いたが、楽しかったのでよしとする。