環境構築の真髄(PATHなどの概念)を理解しよう[Python編]

# **最初に**
今や、プログラミング言語は次々と開発され、世の中に溢れかえっていますよね。
その中でも「なぜpythonがこんなにも熱いのか」。
pythonでできることは多様であり、この記事を読んでいただくとpythonという言語の費用対効果が抜群に高いこともご理解いただけるでしょう。
また、pythonでの環境構築を完了させ、pythonの可能性を探求していきましょう。

# **pythonとは**
Pythonはプログラミング言語の1つです。気軽に楽しくプログラミングできて、しかも実用的です。大きなWebアプリケーションから小さなプログラムまで、様々なソフトウェアを作ることができます。また、データサイエンスや機械学習の分野で最も多く使用されています。

# **Pythonで学習を進める理由**
pythonという言語には下記のような特徴とメリットがあります。

#### **Pythonはデータサイエンス分野で最も使用されているプログラミング言語の1つ**
pythonは様々な分野で活躍出来る言語ですが、特に、データサイエンスの分野でその人気は高く、今もなお活発にライブラリが開発されています。

#### **機械学習に特化したライブラリが存在する**
pythonはscikit-learn（次の記事でご説明します）という機械学習のライブラリを使用することができます。scikit-learnは世界で最もよく利用される機械学習ライブラリの1つで、scikit-learnを簡単に利用できることはPythonの人気を押し上げている一因です。

#### **Pythonエンジニアの年収**
2016年にビズリーチが発表した発表によると、Pythonエンジニアの平均年収は「651万円」で国内で一番高いとされています。これは高まる機械学習エンジニアへのニーズを反映した結果だと言われています。

dropboxやyoutubeのような世界最大規模のサービスもその大部分がpythonで開発されています。
そのほかの多くのwebサイトでもpythonが使用されておりますが、それ以外にもロボットや学術的な研究分野で広く使われています。

# **pythonの環境構築を行おう**
Pythonの環境構築を行う上で、今回はAnacondaというパッケージ経由でPythonをインストールします。

#### **Anaconda**
AnacondaはPython本体と、Pythonでよく利用されるツールをセットにしたPythonパッケージです。
AnacondaをインストールするだけでPython本体とツールがインストールされるため、環境構築がかなり楽になります。

では早速始めていきましょう。

## **pyenvをインストールする**

```
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
```

#### **pyenvとは**
Pythonのバージョンマネージャです。こちらを使ってPythonを管理します。MacであればもともとPythonはインストールされているが、これはシステム用なので使いたくないですね。もちろんHomebrewを使っても楽々とインストールできますが、Pythonのバージョンを複数切り替えて使いたい場合はバージョンマネージャを使うのが現実的です。

上記のコマンドにより `~/.pyenv` ディレクトリの下にpyenvがインストールされます。
注：ホームディレクトリの下に.pyenvディレクトリを作成しておく必要はございません（無ければ勝手に作成されます）。

## **pyenvにパスを通す** 

#### **exportコマンドとは？**
これから`export`コマンドを使っていくので最初に意味を押さえておきましょう。
以下のことができるコマンドです。

- 環境変数を**表示**する。
- 環境変数を**設定**する。


```
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
```

このコマンドにより、`$HOME/.pyenv`　を`PYENV_ROOT`という環境変数として設定します。
* 環境変数として設定しておくことで、「その値を全てのアプリケーションから参照することができる」のです。
つまり、いつでも誰でも必要な情報を取り出すことができるようになります。
環境変数とはそういうものだという認識で大丈夫です（次第に実態がつかめてくるようになります）。



```
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
```

このコマンドにより、`$PYENV_ROOT/bin:＄PATH`をPATHに設定します。
ん？どういうことだ？
現時点で`echo $PATH`コマンドで出力されるPATHが`/b:/c`だとした時に、`PATH="/a:$PATH"`とすると、最終的にPATHは`/a:/b:/c`となることを意味します（厳密にはその他いくつかのコマンドを実行したのちにPATHが更新されるわけですが）。
**「環境変数は参照する時には$を先頭につける」**ということを踏まえればこのコマンドが理解できるのではないでしょか？

```
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
```

こちらのコマンドで`pyenv`を使えるようにする、つまり、「パスを通す」ということが完了します。
`$(pyenv init -)`が説明できるほど理解できておりません、、分かる方はコメント欄などにてご教示頂けますととんで喜びます（笑

しかし、バッシュに書き込んだ結果を有効にするためには、シェルを再起動する必要がありますね。
sourceコマンドを使いましょう。

```
$ source ~/.bash_profile
```

次にAnacondaをインストールしてpythonも同時にインストールしましょう。

```
$ pyenv install anaconda3-4.0.0
```

インストールしてきた後はshimのリフレッシュをしておきましょう。
* shim:プログラムのバージョン間の差異を埋める緩衝材のように使う薄いレイヤーみたいなもの。
参考記事：[Shimの意味](https://qiita.com/ironsand/items/4f0342f5914a9ae99b0e)


```
$ pyenv rehash
```

使うpythonを指定しましょう。

```
pyenv global anaconda3-4.0.0
```

そして下記のようになれば成功です。
python3

```
$ python3
Python 3.5.1 |Anaconda 4.0.0 (x86_64)| (default, Dec  7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

表示が確認できれば、exit()とターミナルに打ち込んで終了させてください。

最後に`python3`と打ち込んでますが、この「３」という数字はpythonのバージョンを表している。現在pythonは「version2系」と「version3系」が共存しておりどちらもよく使われるバージョンとなっています。


## **pyenvでpythonをインストール**
先ほどはanacondaでpythonをインストールしましたが、バージョンを指定してインストールする方法をご紹介します。
バージョン切り替えを体験するために2つほどバージョンが違うpythonをインストールしてみましょう。

```
$ pyenv install 2.7.10
$ pyenv install 3.5.0
```

下記コマンドでインストール可能なpythonのバージョン一覧を表示することができます。

```
$ pyenv install --list
```

## **pyenvでバージョンを切り替えてみる**
バージョンを切り替えてみます。localの場合は今いるディレクトリに、globalの場合は全体に反映されます。

```
$ pyenv local 2.7.10
$ pyenv global 3.5.0
```

ここできちんと変更が反映されているか確認するためpythonのバージョンを調べます。

```
$ python --version
Python 2.7.10
```

このように変更が反映されていれば問題ありません。


# **パスについて**
「パスとはなんぞや」という方は下記記事が参考になります。
[PATHを通すとは？ (Mac OS X)](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)


#**終わりに**
今回はpythonを学習し始めるに当たって、最初に済ませておくべきところを言語のユースケースとともにご説明しました。コマンド一つ一つの意味についても言及することを心がけたつもりですが、これによりrubyなど他の言語についての環境構築の理解にも助けになると考えています。
次回以降には有名なライブラリを中心にまとめていきたいと思います。
何かご要望がございましたら、コメント欄などにてお願いします。