wsl + pyenv + pipenv + JupyterNotebook でWindowsにpython環境構築

#wsl + pyenv + pipenv + JupyterNotebook でWindowsにpython環境構築
	
## <a id="index" href="#index">目次</a>
* [はじめに](#section1)
* [wslの導入](#section2)
* [pyenv pipenv の導入](#section3)
* [Jupyter Notebook の導入](#section4)
* [jupyter notebookのカスタマイズ](#section5)
* [最後に](#section6)

## <a id="section1" href="#section1">はじめに</a>  
Windowsでpython環境を構築します。<br>

Windows上でのpython環境構築にはいくつかオプションがあり、<br>目的によって、整えるべき環境があると思います。<br>
今回の記事では、"pythonおよびパッケージのバージョン管理を柔軟に行い、<br>jupyter notebookで可視化しながらコーディングしたい"<br>という目的に沿った環境構築方法を紹介致します。
<br><br>

環境の構成要素の概要は以下です。

* wsl
	- windows10上でLinux(のようなもの)を利用するための仕組み
	- この漫画がとてもわかりやすいです↓
	- [シス管系女子BEGINS 特別編 まんがでわかるWSL](https://system-admin-girl.com/comic/begins/sp-wsl/)
* pyenv
	- 複数バージョンのpython切り替えるツール
	- 2系と3系での使い分けなど
* pipenv
	- pythonプロジェクトの仮想環境、パッケージを管理するツール
* Jupyter Notebook
	- データ分析でよく使われるツール。
	- ソースコードと実行結果（グラフをインラインで可視化などもできる）をまとめてみれる。

それでは順にやっていきましょう。<br>

<p class="ec__link-index"><a href="#index">[目次へ]</a></p>

## <a id="section2" href="#section2">wslの導入</a>
まず、Linux環境をWindows上で構築するために、Windows Subsystem for Linux(wsl)を導入します。<br>以下の記事を参考に導入してください。<br>
[Windows Subsystem for Linuxをインストールしてみよう！](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)
<br>
デフォルトのターミナルやプロンプトのデザインが気に入らない、という方はターミナルエミュレータや、bash以外のシェルに拡張してみましょう。<br>私はhyper+zsh+wslでWindows上のLinux環境を構築しています。<br>
本題に戻ります。まず以下のコマンドを実行し、gitを使えるようにしましょう。

```
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git
```
<br>

<p class="ec__link-index"><a href="#index">[目次へ]</a></p>

## <a id="section2" href="#section3">pyenv pipenv の導入</a>
次に、pyenvとpipenvを導入します。<br>
### pyenv
まず以下のコマンドでpyenvを導入しましょう。

```
$ sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ pyenv
```

以上はbash前提でのコマンドです。<br>他のシェルを使用している場合、上記コマンドのbashrcをzshrc等に置換し実行してください。<br>
インストールできたら、以下のコマンドでpyenvでインストール可能なpythonのバージョンを確認してみます。<br>

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

pythonだけでなくanacondaやminiconda,pypyなどが見えると思います。<br>
今回は、python 3.7.2と2.7.15をインストールしてみます。

```
$ pyenv install 3.7.2
$ pyenv install 2.7.15
```
pyenvでのバージョン切り替えを試してみます。

```
$ pyenv global 3.7.2
$ python -V
Python 3.7.2 
$ pyenv global 2.7.15 
$ python -V 
Python 2.7.15
```
`python global`でpythonのバージョンを切り替える事が可能です。<br>また、`python loocal`で指定フォルダ内のみでのpythonバージョン切り替えも可能です。<br>以下、python3.7.2で環境を整備していきたいので、バージョンを3.7.2に戻しておきましょう。<br>

```
$ pyenv global 3.7.2
```

###pipenv
まず、以下のコマンドでpipenvを導入しましょう。

```
$ pip install pipenv
```
インストール出来たら、管理しやすいように仮想環境をカレントディレクトリ以下に作成するように設定しましょう。<br>

```
$ echo 'PIPENV_VENV_IN_PROJECT=1' >> ~/.bashrc
```

それでは、python3.7.2の仮想環境を作成してみましょう。<br>
以下のコマンドで、testフォルダ内に仮想環境を作成します。<br>

```
$ mkdir test
$ cd ./test
$ pipenv install --python 3.7.2
Creating a virtualenv for this project… 
Pipfile: /home/user/python/pipenv_test/test/Pipfile
Using /home/user/.pyenv/versions/3.7.2/bin/python (3.7.2) to create virtualenv…
⠸ Creating virtual environment...Already using interpreter /home/user/.pyenv/versions/3.7.2/bin/python
Using base prefix '/home/user/.pyenv/versions/3.7.2'
New python executable in /home/user/python/pipenv_test/test/.venv/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /home/user/.pyenv/versions/3.7.2/bin/python

✔ Successfully created virtual environment!
```

出力結果から、pyenvで導入したpython3.7.2で仮想環境を作成していることが確認できます。<br>
testフォルダ内に仮想環境の.venv、パッケージ管理のためのPipfileとPipfile.lockが作成されます。<br>
この仮想環境上でパッケージを導入する際には以下のコマンドでパッケージをインストールします。<br>その際にバージョン指定をすることも可能です。<br>

```
$ pipenv install pandas==0.23 #パッケージのバージョン指定
$ pipenv install matplotlib
```



<p class="ec__link-index"><a href="#index">[目次へ]</a></p>

## <a id="section2" href="#section4">jupyter notebook の導入</a>
pythonを実行する仮想環境が整備できたので、続けてjupyter notebookを導入してきましょう。<br>

```
$ pipenv install jupyter
$ pipenv run jupyter notebook
...

  To access the notebook, open this file in a browser:
        file:///home/user/.local/share/jupyter/runtime/nbserver-16793-open.html 
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa       
     or http://127.0.0.1:8888/?token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa       

```

以上のコマンドで仮想環境上のjupyterが立ち上がります。<br>表示されるURLをWEBブラウザで開くとjupyter notebookを確認できます。<br>使い方は下記リンク先などで確認してください。<br>
[【Jupyter Notebook】効果的な使い方を知ろう[Python/機械学習]](https://qiita.com/takuyanin/items/8bf396e7b6b051670147)

<p class="ec__link-index"><a href="#index">[目次へ]</a></p>

## <a id="section2" href="#section5">jupyter notebookのカスタマイズ</a>
エディタは機能と見た目が大事です。<br>
カスタマイズしていきましょう。

###機能
拡張機能のnbextensionを有効にしましょう。<br>

```
$ pipenv run jupyter nbextensions_configurator enable --user
$ pipenv run jupyter contrib nbextension install --user
$ jupyter notebook
```

以上のコマンドを実行すると、jupyter notebook 上にNeextensionsというタブが出現します。<br>例えば、Hinterlandを有効にすると補完が効くようになります。<br>他にも便利な機能があるので試してみてください。

###デザイン
jupyter notebookが起動していない時に、以下のコマンドを実行して

```
$ pipenv install jupyterthemes
$ pipenv run jt -t monokai -f hack -fs 80 -tfs 80 -ofs 80 -T -N
$ jupyter notebook
```

立ち上がったjupyter notebookを確認すると、デザインが変更されているのが確認できると思います。<br>元に戻したいときには、以下のコマンドを実行してください。<br>

```
$ pipenv run jt -r
$ pipenv run jt -dfonts
```

jupyter notebookのデザインをもっと自分好みに凝ったものにしたい、<br>という方は、jupyterthemesでググってオプションを調べてみてください。

<p class="ec__link-index"><a href="#index">[目次へ]</a></p>

## <a id="section2" href="#section6">最後に</a>
今回初めてのQiitaへの投稿でした。<br>いままでろくにアウトプットしたことがなく、拙い文章になってしまいましたが、今後も継続的に投稿を続け<br>文章力を高めていきたいなと思っています。<br>内容についてや文章についての忌憚ないコメントお待ちしております！<br>

<p class="ec__link-index"><a href="#index">[目次へ]</a></p>