実習用の環境設定など

実習用の環境作り。Ubuntu 20.04で確認。（Ubuntu 18 LTS でも同様だと思われる。）


# pyenv を使ってPython環境を構築。py37_SSと名付ける。

https://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c#%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%96%B9%E6%B3%95-1

ここを参照。

```.bash_profile``` に

```shell
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# alias activate="source $PYENV_ROOT/versions/anaconda3-5.2.0/bin/activate"
```




```shell
$ pyenv install anaconda3-5.2.0 
Downloading Anaconda3-5.2.0-Linux-x86_64.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh
Installing Anaconda3-5.2.0-Linux-x86_64...
Installed Anaconda3-5.2.0-Linux-x86_64 to /home/nemo_kohei/.pyenv/versions/anaconda3-5.2.0

$ pyenv rehash

$ pyenv global anaconda3-5.2.0

$ echo 'alias activate="source $PYENV_ROOT/versions/anaconda3-5.2.0/bin/activate"' >> ~/.bash_profile

$ source .bash_profile 

$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

$ conda update conda

Solving environment: done

## Package Plan ##

  environment location: /home/nemo_kohei/.pyenv/versions/anaconda3-5.2.0

  added / updated specs: 
    - conda

The following packages will be downloaded:
...
    pysocks-1.7.1              |           py37_1          27 KB
...

The following packages will be UPDATED:
...
    pyopenssl:              18.0.0-py36_0           --> 19.0.0-py37_0           
    pysocks:                1.6.8-py36_0            --> 1.7.1-py37_1  
    python:                 3.6.5-hc3d631a_2        --> 3.7.0-hc3d631a_0        
...

Proceed ([y]/n)? y
...
python-3.7.0         | 31.7 MB | ############################################################################################################################ | 100% 
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done


$ python
Python 3.7.0 (default, Jun 28 2018, 13:15:42) 
[GCC 7.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
```


Summer student用のPython環境、ということで```py37_SS```という名前をつけることにする。

```shell
$ conda create -n py37_SS python=3.7 anaconda

...

  zstd               pkgs/main/linux-64::zstd-1.4.5-h9ceee32_0


Proceed ([y]/n)? y


Downloading and Extracting Packages
_libgcc_mutex-0.1    | 3 KB      | ############################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate py37_SS
#
# To deactivate an active environment, use
#
#     $ conda deactivate
```

ここまで来たら一旦シェルを閉じて新しいタブを開く。

```shell
$ source activate py37_SS

(py37_SS) username:~$ 
```

ちなみに、普通のPython環境に戻る場合は、

```shell 
(py37_SS) $ conda deactivate
```
とすれば良い。
また、Python環境の名前がわからなくなった場合は、以下のコマンドが有用。

```shell
$ conda info --envs
# conda environments:
#
base                  *  /home/[user_name]/.pyenv/versions/anaconda3-5.2.0
cvxpy                    /home/[user_name]/.pyenv/versions/anaconda3-5.2.0/envs/cvxpy
py37                     /home/[user_name]/.pyenv/versions/anaconda3-5.2.0/envs/py37
py37_hvs                 /home/[user_name]/.pyenv/versions/anaconda3-5.2.0/envs/py37_hvs
py37_SS                  /home/[user_name]/.pyenv/versions/anaconda3-5.2.0/envs/py37_SS
vega                     /home/[user_name]/.pyenv/versions/anaconda3-5.2.0/envs/vega
```
上記のようにすれば、自分が過去に作った環境をリスト化できる。


```shell 
$ source activate py37_SS
```
とすれば、再び今構築した環境```py37_SS```に戻れる。

# py37_SS に必要なパッケージを入れる。

さて、ここまでの段階では、```py37_SS``` はpython 3.7 のanaconda の一般的なモジュールしか入っていない。ここからは、自分がこの新しいプロジェクトに必要なモジュールを一つずつ追加していく。
なにか新しいプロジェクトを始めるときに、そのプロジェクトの内容に応じて新しい環境を作ることで、今までのPython環境を壊すリスクを避けられる。


## mpi4py

備忘録：　ISM install (2) mpi4py (2020.12.1より転用)

```shell 
(py37_SS)$ which conda

*** 何か出力されればOK(要確認)***

(py37_SS)$ conda install -c anaconda mpi4py

*** 何か聞かれたら "y" と打てば OK ***

Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.4
  latest version: 4.9.2

...
*** 以下略 ***
```

問題なくimportできていることを確認する。

```shell 
(py37_SS) $ cd
(py37_SS) $ python -c 'import mpi4py'

*** 特にエラーがなければ OK. python -c '何か内容' は、「何か内容」をpythonで行わせる。
*** つまり、上記の場合でエラーがなければ、import mpi4pyを、問題なく実行できると確認できる。
*** 二重チェックとして、下記のように確認することも推奨。

(py37_SS) $ python
Python 3.7.9 (default, Aug 31 2020, 12:42:55) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mpi4py
>>>

*** この場合は、「Python 3.7.9」と表示されるので、Python 3.7系であることも確認できる。
*** また、import mpi4py をエラーなく実行できていることが視覚的にわかる。
```

## emcee

実習でベイズ推定まで行くかはわかりませんが、念のため入れておきます。
```emcee```は天文学者が開発したべイズ推定を行うパッケージですが、もちろん天文以外のデータにも利用できます。初学者の利用しやすさから、少し古いv2.2.1を利用します。


```shell 
(py37_SS) $ cd 

(py37_SS) $ mkdir my_libs_3
(py37_SS) $ cd my_libs_3

*** my_libs_3 は、必要に応じて自分の好きなディレクトリ名にしてOK.
*** これは筆者の環境構築の歴史的背景による命名です（Python 2系を利用していた時期があったため）。

(py37_SS) $ which wget
/usr/bin/wget
*** wget があることがわかる。なければ別途入れる。
*** Ubuntuの場合、
*** $ wget 
*** とすれば、「xxxxを打ち込めば　wget をインストールできるよ」と教えてくれる。

(py37_SS) $ wget https://codeload.github.com/dfm/emcee/zip/v2.2.1

*** ダウンロードが始まる。

--2020-12-01 14:21:03--  https://codeload.github.com/dfm/emcee/zip/v2.2.1
Resolving codeload.github.com (codeload.github.com)... 52.68.31.213
Connecting to codeload.github.com (codeload.github.com)|52.68.31.213|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘v2.2.1’

v2.2.1                                   [ <=>                                                                 ] 774.83K  --.-KB/s    in 0.09s   

2020-12-01 14:21:04 (8.20 MB/s) - ‘v2.2.1’ saved [793424]


(py37_SS) $ pwd
/home/[user_name]/my_libs_3

*** この時点で my_libs_3 にいます。

(py37_SS) $ ls -l
total 780
-rw-rw-r-- 1 793424 Dec  1 14:21 v2.2.1

*** emcee packageがv2.2.1 というファイルに固めてあるので、これを解凍します。


(py37_SS) $ unzip v2.2.1
Archive:  v2.2.1
67c8f79928716a0c65e1e59f96fb845600ea9c2a
   creating: emcee-2.2.1/

*** 略

(py37_SS) $ ls -l
total 784
drwxrwxr-x 6   4096 Jul 15  2016 emcee-2.2.1
-rw-rw-r-- 1 793424 Dec  1 14:21 v2.2.1

(py37_SS) $ cd emcee-2.2.1/

emcee-2.2.1 $ ls -l
total 48
-rw-rw-r-- 1 1264 Jul 15  2016 AUTHORS.rst
drwxrwxr-x 6 4096 Jul 15  2016 docs
drwxrwxr-x 3 4096 Jul 15  2016 document
drwxrwxr-x 2 4096 Jul 15  2016 emcee
drwxrwxr-x 2 4096 Jul 15  2016 examples
-rw-rw-r-- 1 2211 Jul 15  2016 HISTORY.rst
-rw-rw-r-- 1 1109 Jul 15  2016 LICENSE
-rw-rw-r-- 1  208 Jul 15  2016 Makefile
-rw-rw-r-- 1   51 Jul 15  2016 MANIFEST.in
-rw-rw-r-- 1 2035 Jul 15  2016 README.rst
-rw-rw-r-- 1    6 Jul 15  2016 requirements.txt
-rwxr-xr-x 1 1649 Jul 15  2016 setup.py

(py37_SS) $ python setup.py install
running install

*** 略
```


先ほどと同様に、インストールを確認。

```shell 
(py37_SS) $ cd
(py37_SS) $ python
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import emcee
>>> import mpi4py
>>>

*** エラーがなければOK
```


## corner.py

corner.pyは、ベイズ推定のコーナープロットを作成するためのツール。
(手元の記録によると)GitHubからcorner.pyをインストールすることが困難な模様。そこで pip で簡便にインストールする。

```shell 
(py37_SS) $ pip install corner

(py37_SS) $ python
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import corner
>>>
```



## astropy

```shell 
(py37_SS)$ conda install -c anaconda astropy

*** 何か聞かれたら "y" と打てば OK ***

...
*** 以下略 ***
```

## PyGaia

```shell
(py37_SS)$ cd
(py37_SS)$ cd my_libs_3
(py37_SS)$ git clone https://github.com/agabrown/PyGaia.git
(py37_SS)$ cd PyGaia
(py37_SS)$ python setup.py install
```

## constrNMPy

```shell 
(py37_SS)$ python -c 'import scipy'
(py37_SS)$ python -c 'import pandas'
```

エラーがなければ続行。エラーならscipy, pandas をインストール。

```shell 
(py37_SS)$ cd
(py37_SS)$ cd  my_libs_3/
(py37_SS)$ git clone https://github.com/alexblaessle/constrNMPy.git
(py37_SS)$ cd constrNMPy
(py37_SS)$ python setup.py build
(py37_SS)$ python setup.py install

(py37_SS)$ cd
(py37_SS)$ python -c 'import constrNMPy'

# エラーがなければOK

```


## AGAMA

https://github.com/GalacticDynamics-Oxford/Agama 

AGAMAはGalactic dynamicsに有用なパッケージ。内部はC++で記述されているが、ユーザーはPythonでコードを書けば良い。Pythonの扱いやすさと、C++の計算速度の両方の長所を備えている。今回の実習で一番重要なパッケージと言える。


#### .bash_profile 

AGAMA のために必要なpathを通しておく。

```shell 
*** ~/.bash_profile  に以下を加筆。
*** 「my_libs_3」でない場所にインストールする場合はpathを適宜変更する。

LIBRARY_PATH=$HOME/my_libs_3/Agama/lib/:$LIBRARY_PATH
export PYTHONPATH=$HOME/my_libs_3/Agama/:$PYTHONPATH
```  

#### install AGAMA

```shell 
(py37_SS) $ cd ~/my_libs_3
(py37_SS) $ git clone https://github.com/GalacticDynamics-Oxford/Agama.git

(py37_SS) $ cd Agama
(py37_SS) $ python setup.py build

*** 途中で「xxxxがないけどインストールする？」と聞かれたら"y"と答えておく。
*** 数十分かかる。

(py37_SS) $ python setup.py install

*** 途中で「xxxxがないけどインストールする？」と聞かれたら"y"と答えておく。
*** １時間かかる。

Processing dependencies for agama==1.0
Finished processing dependencies for agama==1.0


(py37_SS) $ cd
(py37_SS) $ python
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import agama
>>>

*** 無事インストールできた模様。

```