人工知能（Chainer/TensorFlow/CSLAIER）のためのpython環境構築

#目次

1.記事の目的
2.筆者の開発環境
3.インストールするもの
4.環境構築の際の注意点
5.Homebrewのインストール
6.pyenvのインストール
　・環境変数について
　・.bash_profileについて
　・viコマンドについて
5.anacondaのインストール
6.補足（virtualenvについて）

#記事の目的
　最近人工知能が盛り上がってきてますね！僕はプログラミング初心者ですが、人工知能を使ってみたいと思い、初めてpythonを使いました。macでの環境構築でかなり手間取ったので、わからなかった点をまとめて見ました。人工知能のためのpython環境構築の役に立てば嬉しいです。

#筆者の開発環境
・MacBook Pro (Retina, 13inch, Early 2015)
・macOS Sierra (バージョン 10.12.2)
・プロセッサ (2.7 GHz Intel Core i5)
・メモリ (8 GB 1867 MHz DDR3)
・グラフィックス (Intel Iris Graphics 6100 1536 MB)

#インストールするもの
この記事では３つのものをインストールします。
またそれぞれについて、なぜそれをインストールするのか？を説明し、参考になる記事も貼っておきます。
・Homebrewのインストール
・pyenvのインストール
・anaconda（python本体が入っています）のインストール

#環境構築の際の注意点
まずは、pythonのインストール・環境構築時の注意点についてです。
pythonには古いバージョンである２系と新しいバージョンである３系があります（また２系と３系それぞれにも、2.x、3.xのようにバージョンがあります）。
通常であれば新しいバージョンである３系を使っておけば大丈夫だと思うところですが、pythonに関してはそうではありません。なぜなら、徐々に３系が多くの人に使われ始めているのですが、２系と３系の間には互換性がなく、まだ２系でしか動かないライブラリがたくさんあるからなのです。よって、pythonは自分のパソコンに直接（グローバル環境に）ライブラリ等をインストールするのではなく、２系と３系でそれぞれ別々に仮想環境を作ってインストールします。
ちなみに仮想環境とは、
コンピュータ上にソフトウェアによって仮想的に構築されたコンピュータ（仮想マシン）が備える仕様や機能の総体のこと。僕は自分のパソコンの中に互いに干渉しないスペースを作って、そこで開発するという感じなんじゃないかなと思っています。

パソコンに直接ライブラリを入れてしまうと、今自分が使っているのはpythonのバージョンは２系と３系のどちらなのかとか、インストールしてあるライブラリがどちらに対応しているのかといったことが、わからなくなってしまいます。
よって、どちらでも動く仮想環境を用意し、ライブラリをバージョンで分けてインストールして、管理すべきなのです。

#Homebrewのインストール
まずはじめにHomebrewというパッケージ管理システムをインストールします。Homebrewを使うことでソフトのインストールや削除をコマンド１発で簡単に行えるようになります。
Homebrewについては下記サイトがよくまとまっていて、参考になりました。Homebrewについてよくわからない人は、一読してみてください。

「homebrewとは何者か。仕組みについて調べてみた。」
http://qiita.com/omega999/items/6f65217b81ad3fffe7e6

それでは、Homebrewのインストールです。Homebrewをインストールするには、

・An Intel CPU 1
・OS X 10.10 or higher 2
・Command Line Tools (CLT) for Xcode: xcode-select --install
・A Bourne-compatible shell for installation (e.g. bash or zsh) 4
が必要なようです。

この中でインストール時のエラー原因として最も多いのが、Command Line Toolsをインストールしていないことです。Command Line Toolsのインストール方法については下記のサイトが分かりやすいです。もし入っていませんでしたら、一読してみてください。

「[mac]Command Line Toolsをインストールする」
http://www.programing-style.com/mac/mac-command-line-tools-install/

準備ができましたら、Homebrewのインストールを始めます。

```:homebrewのインストールコマンド
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  
```

途中でパスワードの入力を促されます。少々時間がかかります。

インストールできたかどうかの確認。

```:インストールの確認
$ brew doctor
```

もし正常にインストールできていない場合は、Warningが表示されますが、下記のサイトが参考になりました。

「MacにHomebrewをインストールする手順とWarningの解決方法」
http://qiita.com/unsoluble_sugar/items/acaffa6d0e28c3c24934

さて、無事にインストールできましたら、念のためHomebrewをアップデートしておきます。

```:brewアップデート
$ brew update
```

これでHomebrewを最新のものにすることができます。

#pyenvのインストール
pyenv とはpythonの仮想環境を構築したり、バージョンの切り替え・管理を行なったりするためのツールです。これを使うと簡単にpythonの２系と３系を切り替えることができるようになります。
では先ほどインストールした、Homebrewを使ってpyenvをインストールしていきましょう。

```:pyenvのインストール
$ brew install pyenv
```
pyenvのインストールは上記のコマンドで簡単に行えると思いますが、インストールした後が、筆者にとっては厄介でした。pyenvはただインストールするだけではなく、環境変数を通さなければなりません。

環境変数を通すためには、環境変数についての他に、隠しファイル(.bash_profile)とviコマンドについての知識も、少しですが必要になってきます。


##環境変数の設定方法
###環境変数について
環境変数とは、アプリケーションの挙動に関する設定を保存するための仕組みであり、システムが必要としている情報を保管している変数のことです。

「PATHを通すとは？（Mac OS X）」
http://qiita.com/soarflat/items/09be6ab9cd91d366bf71

###.bash_profileについて
ざっくり言うと、「.bash_profile」はパソコンを起動した時に読み込まれて色々な設定をしてくれるファイルで、ここに環境変数を書き込むと、使えるように設定してくれるというもの。
ホームディレクトリ（〜）で、ls –aと打つと、一つ下の階層の隠しファイル（ファイル名の前に'.'がついているもの）を含めた全ファイルを見ることができるので、「.bash_profile」があることがわかります。

「.bash_profileとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」
http://wa3.i-3-i.info/word13650.html

###viコマンドについて
viコマンドはここでは、ターミナルで「.bash_profile」を変更するために使うコマンドと覚えておけば大丈夫な気がします。

「vi[コマンド]とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」
http://wa3.i-3-i.info/word11517.html

###環境変数の設定
では環境変数を設定していきましょう。
ホームディレクトリで、ls –aを入力し、下の階層に「.bash_profile」があることを確認します。

```:.bash_profileの所在の確認
$ ls -a
```

「.bash_profile」があったら、

```:.bash_profileに入る
$ vi .bash_profile
```
入ったばかりの状態は見ることしかできません。
ここでviコマンドの出番です。ファイルの中にいる状態で、

```:viコマンド
i
```

を入力すると、入力モードになり、新しく入力することができます（キーボードがひらがなやカタカナになっていると上手くいかないので、必ず英字になっていることを確認しましょう）。ファイルの最後に、-- INSERT --が表示されていれば入力モードになっています。

新しく追加する環境変数です。

```:新しく追加する環境変数
export PATH="/usr/local/Cellar/.pyenv/shims:$PATH"
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
```

入力する場所はファイルのどこでも大丈夫です。わかりやすいから一番最後が良いのかな。入力したら、「escキー」を押して入力モードを終了します。そして保存して.bash_profileを抜けます。

```:保存と.bash_profileを抜ける
shift + zz
```

「.bash_profile」を変更したら、必ず反映させます。

```:変更の保存
$ source .bash_profile
```

環境変数の通し方についてはこの記事がとても詳しいです。
「PATHを通すために環境変数の設定を理解する（Mac OS X）」
http://qiita.com/soarflat/items/d5015bec37f8a8254380


#anacondaのインストール
無事に環境変数を設定することができましたら、pyenvでインストール可能なものを一覧で見ることができます。

```:一覧
pyenv install -l
```

今回はpython本体を直接インストールするのではなく、python本体に加えて、pythonでよく使われるパッケージをまとめてインストールすることのできるanacondaをインストールします。anacondaの中にはChainer（日本で人気のある人工知能ライブラリ）のインストールに必要な、NumpyやSixがすでにインストールされているので非常に便利です。別々にインストールする手間も省けますし、管理も楽になります。anaconda2-x.x.x が２系、anaconda3-x.x.xが３系用となっています。

anaconda２系のインストール（2017年1月4日時点で最新はanaconda2-4.2.0）

```:pyenvを使ったanaconda２系のインストール
$ pyenv install anaconda2-4.2.0
```

anaconda３系のインストール（2017年1月4日時点で最新はanaconda3-4.2.0）

```:pyenvを使ったanaconda３系のインストール
$ pyenv install anaconda3-4.2.0
```

おそらくなんの問題もなくインストールすることができると思います。
pyenvで現在使用しているpythonのバージョンの確認です。

```:バージョンの確認
$ pyenv versions
```

```:ターミナルに表示されること
 *system
  anaconda2-4.2.0 (set by /Users/your_name/.pyenv/version)
  anaconda3-4.2.0
```

*がついているのが現在使用しているpythonのバージョンです。デフォルトではsystemになっていると思います。
python２系にバージョンの切り替えをしてみましょう。

```:２系へのバージョン変更
$ pyenv global anaconda2-4.2.0
```

変更できたか、確認してみます。

```:バージョンの確認
$ pyenv versions
```

```:ターミナルに表示されること
  system
 *anaconda2-4.2.0 (set by /Users/your_name/.pyenv/version)
  anaconda3-4.2.0
```

systemについていた*が、anaconda2-4.2.0についていれば成功です。
バージョンの変更後は必ず更新しましょう。

```:pyenvの更新
$ pyenv rehash
```

anacondaに入っているパッケージを確認することができます。

```:anacondaに入っているパッケージの確認
$ conda list
```

NumpyやSixが入っていることが確認できますね。　Pythonも入っています。
無事にpythonのインストールをすることができました。


#補足
##virtualenvについて
virtualenvは同じpythonバージョンでも違う環境を構築することができます。
pyenvはpythonのバージョン管理、virtualenvは同じpythonバージョンの中で仮想環境の管理ツールです。
ここではvirtualenvは設定しませんでしたが、気になる方は見てみてください。

「仮想環境 バージョン管理 まとめ Python」
http://qiita.com/hedgehoCrow/items/0733c63c690450b14dcf


「pyenvとvirtualenvで環境構築」
http://qiita.com/Kodaira_/items/feadfef9add468e3a85b




次回は人工知能ライブラリである、Chainerのインストールをしてみたいと思います。
間違っている点等ありましたら、コメントして頂ければ幸いです。