Macにpyenv + AnacondaでPython環境作成の備忘録

#はじめに
- Pythonをお勉強するため、Mac上にPython開発環境を整えてみたので、自分用の備忘録としてまとめました。
- ゴールは、Anaconda（Python3系）をインストールしてJupyter Notebookで作業できるまでとしました。

#動作環境
- macOS Mojave 10.14.6

#1. Homebrewのインストール
##1-1. Homebrewとは
>
[wikipedia](https://ja.wikipedia.org/wiki/Homebrew_(パッケージ管理システム))
Mac OS X オペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつ。
>

- パッケージをインストール、アンインストールできる管理システムのこと。

##1-2. インストール方法
1. [Homebrew](https://brew.sh/index_ja)にアクセス。
2. スクリプトをコピーし、ターミナルで実行。
3. インストール確認。

```sh:bash
# スクリプト実行
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# ログ
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
︙
==> The Xcode Command Line Tools will be installed.
# Xcode Command Line Toolsをインストールする場合は、RETURNを押下。
Press RETURN to continue or any other key to abort 
==> /usr/bin/sudo /bin/chmod u+rwx /usr/local/bin
# ログイン時のPasswordを入力
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/bin
︙
Already up-to-date.
==> Installation successful!

# インストール確認
$ brew --version
# ログ
Homebrew 2.1.9
```

#2. pyenvのインストール
##2-1. pyenvとは

- Pythonのバージョンを管理できるコマンドラインツールのこと。

##2-2. インストール方法

1. `Homebrew`で`pyenv`をインストール。
2. インストール確認。
3. `pyenv`にPathを通す。
4. 設定（Path）の適用。

```sh:bash
# pyenvをインストール
$ brew install pyenv

# インストール確認
$ pyenv --version
# ログ
pyenv 1.2.13

# pyenvにPathを通す
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

# 設定の適用
$ source .bash_profile
```

#3. Anacondaのインストール
##3-1. Anacondaとは

>[wikipedia](https://ja.wikipedia.org/wiki/Anaconda_(Pythonディストリビューション))
データサイエンスおよび機械学習関連アプリケーション（大規模データ処理、予測分析（英語版）、科学計算）のためのPythonおよびRプログラミング言語のフリーでオープンソースのディストリビューションであり、パッケージ管理および展開の単純化を目指したものである。
>

- __「Python」__ + __「各種ライブラリ」__をまとめて含んだパッケージのこと。

##3-2. インストール方法

1. `pyenv`でインストール可能なAnacondaを検索。
2. Anacondaをインストール。

```sh:bash
# インストール可能なAnacondaを検索
$ pyenv install -l | grep anaconda

# ログ
anaconda-1.4.0
︙
anaconda2-5.0.0
︙
anaconda3-5.3.1

# インストール
$ pyenv install anaconda3-5.3.1
```

#4. Anacondaで仮想環境を作成

##作成方法
1. `conda`で仮想環境を作成。
2. 作成した仮想環境を作業ディレクトリで有効化（`pyenv local`）。
3. `activate`で仮想環境を起動。
4. Jupyter Notebookを起動。起動できればゴール。

``` sh:bash
# Anacondaをglobalに切り替え
$ pyenv global anaconda3-5.3.1

# 仮想環境を作成
$ conda create --name anaconda_py3.6 python=3.6 anaconda

# 作成した仮想環境を作業用ディレクトリで有効化
$ mkdir Workspace
$ cd Workspace
$ pyenv local anaconda3-5.3.1/envs/anaconda_py3.6

# globalをsystemへ戻す
$ pyenv global system

# 作成した仮想環境をActivateで起動(フルパスで指定)
$ source $PYENV_ROOT/versions/anaconda3-5.3.1/bin/activate anaconda_py3.6

# 作業ディレクトリでjupyter Notebookを起動
$ cd Workspace
$ jupyter notebook
```

- Jupyter Notebookを起動できればゴール。
<img width="700" alt="jupyter notebook起動.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477950/a1950a9b-0880-23f8-4248-9094d2a52522.png">

#5. Jupyter Notebookで仮想環境を指定する

- 作成したAnacondaの仮想環境をJupyter Notebook上で指定できるようにする。

##5-1. 設定方法
- Anacondaのデフォルト環境：__base（root）__でJupyter Notebookに対するパッケージ追加とその設定を行う。

```sh:bash
# パッケージの追加
$ pip install environment_kernels

# 設定ファイルの生成
$ jupyter notebook --generate-config

# 設定を追加
$ echo "c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'" >> ~/.jupyter/jupyter_notebook_config.py
$ echo "c.EnvironmentKernelSpecManager.conda_env_dirs=['/Users/toyoizumi/.pyenv/versions/anaconda3-5.3.1/envs/']" >> ~/.jupyter/jupyter_notebook_config.py
```

- Jupyter Notebookを起動して、「Kernel > Change kernel」からAnacondaで作った仮想環境（今回はanaconda_py3.6）が選択できればOK。
<img width="700" alt="カーネル選択.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477950/f4c8d28f-874e-024c-8d7b-9e3b99f14556.png">

#6. 仮想環境の切り替え方法

- 環境の切り替えは、`activate`と`pyenv local`を併用。

``` sh:bash
# Activateで指定環境を起動できる(フルパスで指定)
$ source $PYENV_ROOT/versions/anaconda3-5.3.1/bin/activate anaconda_py3.6

# 作業ディレクトリごとに仮想環境を指定できる
$ mkdir Workesapce
$ cd Workuspace
$ pyenv local anaconda3-5.3.1/envs/anaconda_py3.6

# Deactivateで環境を解除できる(フルパスで指定)
$ source $PYENV_ROOT/versions/anaconda3-5.3.1/bin/deactivate anaconda_py3.7
```

- `activate`をフルパスで実行するのは煩わしいので、aliasを設定。

``` sh:bash
# .bashrcにaliasを追加
$ echo 'alias activate="source $PYENV_ROOT/versions/anaconda3-5.3.1/bin/activate"' >> ~/.bashrc

# 設定の適用
$ source ~/.bashrc

# 「activate + 仮想環境名」で指定環境を起動出来る
$ activate anaconda_py3.6

# 指定環境でJupyter Notebookを起動出来る
$ jupyter notebook
```