仮想環境 バージョン管理 まとめ Python

# 概要
Pythonは2系と3系でそれぞれ互換性がありません．
この関係から二つのバージョンのものが出回っています．

仮想環境管理の方法が分かりやすく紹介しているスライドがあったので
そのスライドの内容をお借りし，自分がメインで使っているvirtualenvの内容を付け足しました．
詳しく知りたい方は，参考文献を参照してください．

pyenv-virtualenvはディレクトリごとに設定でき，vitualenvと違って使用時にactivateする必要がないので一番おすすめです

# 仮想環境紹介
## virtualenv
・同一バージョンのPythonで使用するライブラリを切り替えて使えるようにするツール
・pip でインストールできる
・Windowsでも使える
<img width="1164" alt="vertualenv.png" src="https://qiita-image-store.s3.amazonaws.com/0/116092/9f7f132c-4a2f-871b-aac7-b344dd34167c.png">
<引用:[機械学習名古屋_第7回勉強会_Python環境構築方法.key](https://speakerd.s3.amazonaws.com/presentations/0d969d6526dd4b5fa0549f4e3481745f/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%90%8D%E5%8F%A4%E5%B1%8B_%E7%AC%AC7%E5%9B%9E%E5%8B%89%E5%BC%B7%E4%BC%9A_Python%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%96%B9%E6%B3%95_20161015.pdf)>
## pyenv
・色々なPythonバージョンを管理するツール
・Python2系と3系を切り替えて使える
・shellやディレクトリで使用するPythonを指定可能
・同一バージョンのPythonでライブラリを切り替えて使うことはできない
・Windowsでは使えない
<img width="1113" alt="pyenv.png" src="https://qiita-image-store.s3.amazonaws.com/0/116092/6546efed-0920-98a4-c774-ab05cb0e4804.png">
<引用:[機械学習名古屋_第7回勉強会_Python環境構築方法.key](https://speakerd.s3.amazonaws.com/presentations/0d969d6526dd4b5fa0549f4e3481745f/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%90%8D%E5%8F%A4%E5%B1%8B_%E7%AC%AC7%E5%9B%9E%E5%8B%89%E5%BC%B7%E4%BC%9A_Python%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%96%B9%E6%B3%95_20161015.pdf)>
## pyenv-virtualenv
・pyenvで同一バージョンのPythonでライブラリを切り替えて使えるようにしたツール
・作者はpyenvと同じ方
・Windowsでは使えない
<img width="1166" alt="pyenv-virtualenv.png" src="https://qiita-image-store.s3.amazonaws.com/0/116092/0a435fdb-24a6-f97f-713b-9ca959d8ac80.png">
<引用:[機械学習名古屋_第7回勉強会_Python環境構築方法.key](https://speakerd.s3.amazonaws.com/presentations/0d969d6526dd4b5fa0549f4e3481745f/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%90%8D%E5%8F%A4%E5%B1%8B_%E7%AC%AC7%E5%9B%9E%E5%8B%89%E5%BC%B7%E4%BC%9A_Python%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%96%B9%E6%B3%95_20161015.pdf)>
# インストール・使用
LinuxとWindowsのインストール方法も紹介しているのですが，
文量が多くなるのでMacのみに省略させていただきます．

## virtualenv
### インストール
```shell:インストール
$ pip install virtualenv
```

```shell:仮想環境作成
$ virtualenv -p [Pythonバージョン] [仮想環境名]

# 例
$ virtualenv -p 3.5 python3.5
```

### 使用
```shell:使用
$ source [仮想環境名]/bin/activate

# 例
source python3.5/bin/activate
```
成功すると端末の表示が
```(python3.5)$```
と変更しているはずです．


```shell:終了
$ deactivate
```

環境の削除を行いたい場合は，作成ディレクトリを削除すればOKです．

## pyenv-virtualenv
### インストール
```shell:インストール
$ brew install pyenv-virtualenv
```

```shell:環境変数設定(bashの場合，デフォルトはbashです)
$ echo 'export PYENV_ROOT="/usr/local/var/pyenv"' >> ~/.bash_profile
$ echo 'if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile
$ echo 'if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi' >> ~/.bash_profile
$ source ~/.bash_profile
```
bash以外のシェルを使用の方は**.bash_profile**の部分を変更してください．

```shell:環境変数設定(zshの場合)
$ echo 'export PYENV_ROOT="/usr/local/var/pyenv"' >> ~/.zshrc
$ echo 'if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi' >> ~/.zshrc
$ echo 'if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi' >> ~/.zshrc
$ source ~/.zshrc
```



```shell:Pythonインストール
pyenv install [Pythonバージョン]
```

```shell:仮想環境作成
$ pyenv virtualenv [Pythonバージョン] [仮想環境名]

# 例
$ pyenv virtualenv 2.7.11 Py2Base
$ pyenv virtualenv Py2Base py2-test 
```
仮想環境から新しい仮想環境を作った場合はライブラリ等も引き継がれるようです．

### 使用
```shell:標準で使用するPythonを変更
$ pyenv global [仮想環境名]
```

```shell:現在のshellのPythonを変更
$  pyenv shell [仮想環境名]
```

```shell:現在のディレクトリのPythonを変更
$ pyenv local [仮想環境名]
```

```shell:仮想環境削除
$ pyenv unisntall [仮想環境名]
```

# 参考文献
[機械学習名古屋_第7回勉強会_Python環境構築方法.key](https://speakerd.s3.amazonaws.com/presentations/0d969d6526dd4b5fa0549f4e3481745f/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%90%8D%E5%8F%A4%E5%B1%8B_%E7%AC%AC7%E5%9B%9E%E5%8B%89%E5%BC%B7%E4%BC%9A_Python%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%96%B9%E6%B3%95_20161015.pdf)