CURP (CURrent Calculation for Protein) のインストールで躓いた点 (OS: Ubuntu)

# はじめに
Molecular Dynamics Simulation を用いてアミノ酸配列からタンパク質の計算をし、エネルギーや熱の流れを計算できる "CURP(CURrent Calculation for Protein" というオープンソースソフトウェアがある。

>CURP CURrent Calculation for Protein
http://www.comp-biophys.com/yamato-lab/curp.html


>[Github] CURP CURrent Calculation for Protein
https://github.com/yamatolab/current-calculations-for-proteins

お試しで使っていみようと思い導入したが、かなりのエラーに出くわしたので備忘録にもと思い過程を記す。以下、環境はUbuntu(GNOME)を想定しています。

# 導入環境

筆者は以下の環境で導入した。

- OS: Ubuntu 20.4LTS
- パッケージ管理: dpkg (いやこれは明記せんでええんよっ)
- Python: <b>2.7.18</b> (2022/04時点 python2系のみ対応)
- 仮想環境: virtualenv 20.9.0

ドキュメントによれば、Python2 系で作られているようなのでPython2 系で最新の Python 2.7.18 を使った。

CURP は PyPI にもリポジトリ登録があるが、2019年から更新なし。GitHub の方にも安定版があるので、git cloneすべし。

Python2 系なので Virtualenv を用いて仮想環境を作成し、その中で GitHub の Master Branch を クローン してまずローカルに落とした。

```gnome:console
git clone https://github.com/yamatolab/current-calculations-for-proteins.git
```

(PyPIリポジトリからの導入でも以下同じエラーが出てきて同じ方法で導入できている)

GitHubからリポジトリをクローンした場合は、まず仮想環境上で

```gnome:console
pip install .
```

等としてパッケージをインストールできるか試す。ここで成功すれば問題なし。
以下は、自分の環境で遭遇したエラーに一致する箇所だけ参照しながら、エラーが取れるごとにCURPパッケージのインストールを試して、逐次エラーを解決していけば良い。

# エラー

### from numpy.distutils.core import setup ImportError: No module named numpy.distutils.core

どうやら事前に numpy が入っていないとエラーを吐く。 numpy は Version 1.17 から Python2系の対応がなくなっている。私は numpy 1.14.6 をインストールした。

(あっ、あれ仮想環境がアクティベイトされないぞぉ？仮想環境の有効化は↓)

```console:cosole
source [your env name here]/bin/activate
```

### error: No package 'hdf5' found

まず、PyPIからインストールできるか試す。インストールできなければ Ubuntu に必要なライブラリが入っていない可能性が高い。既に入っていても以下の実行は問題ないのでエラーが出たら内容に応じて必要なライブラリをインストールしてみる。


```console:console
sudo apt-get install libhdf5-dev libhdf5-serial-dev netcdf-bin libnetcdf-dev
```


```console:console
export HDF5_DIR=/usr/include/hdf5
```

コンフィグファイルに hdf5 のディレクトリがあるパスを通す。 HDF5_DIR=/usr/include/hdf5 は必ずしも同じとはならないので、エラーが出たら hdf5のディレクトリを探して正しいパスを通そう。
無事成功すれば clone したパッケージまたは PyPIからインストールを再度試す。

setup.py で netCDF4>=1.2.4 とあるが、netCDF4 Version: 1.5.4 からは Python2 系に非対応。私は 1.2.4 をインストールした。(>=1.2.4, <1.5.4 ならいいと思う)

```console:console
pip install netCDF4==1.2.4
```

どうでもいいけど、ローカルに落としていたリポジトリを使って pip インストールするときに、キャッシュを使ってほしくないなら

```console:console
pip cache purge
```

でOK牧場の決闘。

>OK牧場の決闘
https://www.amazon.co.jp/gp/video/detail/B00EOAIO64/ref=atv_dp_share_cu_r

### Graphviz cgraph.h not found

これも、Ubuntuに必要なライブラリがない為なので必要なライブラリをインストールする。

```console:console
sudo apt -y install graphviz-dev libgraphviz-dev
```

これで私は パッケージの要件である pygraphviz のインストールに成功した。( pygraphviz <1.6)

### No FORTRAN compiler found (or FORTRAのコンパイラーが見つかりません)

文字通りで、CURP は一部 FORTRAN で記述されているので FORTRAN のコンパイラーが必要。私は gfortran をインストールした。

```console:console
sudo apt -y install gfortran
```

### error: Python.h: No such file or directory
これも、ローカルに必要なライブラリがない為なので必要なライブラリをインストールする。

```console:console
sudo apt -y install python-dev
```

### error: mpi.h not found
これも、ローカルに必要なんがねぇんよっ！すすっとインストール

```console:console
sudo apt -y install ibmpeg2-4-dev libopenmpi-dev
```

(いや、ibmpegは要らないかもしれない。)

### 不足していたパッケージ・ライブラリの導入完了
私は、以上のエラーを解決すれば GitHub から clone してきたパッケージのインストールに成功した。

# まとめ
追加したパッケージ・ライブラリは以下

## Linuxパッケージ・ライブラリ

- pythonpy
- libhdf5-dev
- libnetcdf-dev
- python-dev
- graphviz-dev
- gfortran
- libmpeg2-4-dev
- libopenmpi-dev

## Pythonライブラリ

- pip==20.3.4
- setuptools==44.1.1
- wheel==0.32.0
- numpy==1.14.6
- nose==1.3.7
- netCDF4==1.2.4
- pygraphviz=1.5
- mpi4py==3.1.1
- Benchmarker==4.0.1
- configparser==4.0.2
- Curp


実は GitHub リポジトリによれば Python 3系 への移植ができているとかいないとか。
近日中に CURP v1.3 on Ubuntu のコンテナイメージ作って共有しようとも思っています。 (2022/04/27)