macにpyenv経由でpythonをインストールして第一原理計算支援ツール"ASE"を動かせるようにする

# ASE(Atomic Simulation Enviroement)とは
公式HP:https://wiki.fysik.dtu.dk/ase/

ASEは原子構造のモデリングや計算結果の可視化を行うPythonモジュール群です。Quantum ESPRESSOやVASPなどの第一原理計算パッケージとの連携も可能で、なんだかいろいろできそうなのでインストールしてみましょう。


#pyenvのインストール

```zsh
$ brew install pyenv
```

いちおう場所の確認をしておく。

```zsh
$ which pyenv
/usr/local/bin/pyenv
```

###Python3のインストール
--listオプションを付けてインストール可能なパッケージ一覧を表示します。Python3系の最新安定版は3.7.0らしいので、それをインストールしようとしたところ以下のエラーが。

```zsh
$ pyenv install -list
︙
2.1.3
2.2.3
2.3.7
2.4
︙ 
3.7.0
︙

$ pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew

BUILD FAILED (OS X 10.14 using python-build 20180424)

︙

make: *** [install] Error 1
```

さあこのエラーはなんでしょうか。グーグルに聞いてみたら既に対処されている方がいました…↓
https://qiita.com/zreactor/items/c3fd04417e0d61af0afe

macOS SDK headerをインストールするために以下のコマンドを叩きます。

```zsh
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Password:
installer: Package name is macOS_SDK_headers_for_macOS_10.14
installer: Installing at base path /
installer: The install was successful.
```
再び…

```zsh
$ pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew
Installed Python-3.7.0 to /Users/your_name/.pyenv/versions/3.7.0
```
無事成功！

###pyenvにパスを通す
このままターミナルに"python"と打っても、macOSデフォルトのPython2.7が起動するだけなのでpyenvのパスを通してあげる必要があります。自分が使ってるシェルの設定ファイル(bashなら.bash_profile,zshなら.zprofile)に以下を記述します。「シェルってなんだよ」って人は以下のコマンドを叩いてください。

```zsh
$ echo $SHELL
/usr/local/bin/zsh
```
こんなふうに自分の使ってるシェルがエコーで帰ってきます。シェルの設定ファイルはホームディレクトリにあることが多いので、念の為確認してみます。

```zsh
$ ls -a ~/ #ホームディレクトリにある隠しファイルを表示
︙　
.zprofile 
︙
```
この.zprofileに以下のパスを追加します。

```zsh
$ vi ~/.zprofile #./zprofileを編集して以下を追記

︙　　　　                              
export PYENV_ROOT="$HOME/.pyenv" 
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"```

$ source ~/.zprofile #.zprofileの有効化
```
これでpyenvが使えるようになりました。
###普段使いのPythonを指定

pyenvがいま選んでいるPythonを確認すると、以下のようにsystem(macのデフォルト:Python2.7)でした。

```zsh
$ pyenv versions #インストールされているpythonの一覧を表示
* system (set by /Users/your_name/.pyenv/version) 
  3.6.6
  3.7.0 
```
さきほどインストールした3.7.0に指定し直します。

```zsh
$ pyenv global 3.7.0 #利用するバージョンを3.7.0に指定

$ pyenv versions
  system 
  3.6.6
* 3.7.0 (set by /Users/your_name/.pyenv/version)

$ python -V #pythonバージョンを確認
Python 3.7.0

$ pip -V #pipのバージョンを確認
pip 10.0.1 from /Users/your_name/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pip (python 3.7)

$ which python #Pythonのある場所を確認。あとで必要になります。
/Users/your_name/.pyenv/shims/python
```


#ASEのインストール
公式のHowToInstall
https://wiki.fysik.dtu.dk/ase/install.html

ASEはPythonのパッケージ管理ソフトpipを用いてインストールします。

```zsh
$ pip install ase

︙

Installing collected packages: six, cycler, pyparsing, python-dateutil, numpy, kiwisolver, matplotlib, scipy, Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask, ase
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 ase-3.16.2 click-7.0 cycler-0.10.0 flask-1.0.2 itsdangerous-1.0.0 kiwisolver-1.0.1 matplotlib-3.0.0 numpy-1.15.3 pyparsing-2.2.2 python-dateutil-2.7.3 scipy-1.1.0 six-1.11.0
```

このようにaseをインストールするのと同時に、numpy,matplotlib等のライブラリを自動でインストールしてくれます。便利。

###ASEのテスト実行
以下のようにASEのテストを実行します。

```zsh
$ ase test
zsh: /usr/local/bin/ase: bad interpreter: /usr/local/opt/python/bin/python3.6: no such file or directory
︙
```
？？？
どうやらASEがpyenvでインストールしたpython3.7.0を見つけてくれないっぽい。
ASEは`/usr/local/bin/`にあり、中身を`vim`で開いてみると1行目に以下の記述があった。

```zsh
$ vi /usr/local/bin/ase
##!/usr/local/opt/python/bin/python3.6
︙
```
つまりaseは`/usr/local/opt/python/bin`下にあるpythonを探そうとしているんですが、そんなところにPythonはいないのでここをpyenv下にあるPythonに置き換えます。

```zsh
##!/usr/local/opt/python/bin/python3.6  (置き換え前) 
##!/Users/your_name/.pyenv/shims/python (置き換え後)
```

ターミナルを再起動して、aseの場所を確認すると、

```zsh
$ which ase
/Users/your_name/.pyenv/shims/ase
```
となり、pyenvの下にaseが来ました。

```zsh
$ ase test
platform                 Darwin-18.0.0-x86_64-i386-64bit
python-3.7.0             /Users/your_name/.pyenv/versions/3.7.0/bin/python3.7
ase-3.16.2               /Users/your_name/.pyenv/versions/3.7.0/lib/python3.7/site-packages/ase/
numpy-1.15.3             /Users/your_name/.pyenv/versions/3.7.0/lib/python3.7/site-packages/numpy/
scipy-1.1.0              /Users/your_name/.pyenv/versions/3.7.0/lib/python3.7/site-packages/scipy/
test-dir                 /var/folders/5r/t_95lbdj1_nbdm0wtxspsfyr0000gn/T/ase-test-pv_pilom

...........................s........................ss.............s.......s................s..................s.s.ssss.....s......ssssssssss......ss....ssssss..ss...........ss...............s............sssss..s..ssssssss.sss..sssssssssssssss
----------------------------------------------------------------------
Ran 243 tests in 185.630s

OK (skipped=68)
```

テストはこれで完了です。