pyenv + pyenv-virtualenv install on ubuntu for window10 

[pyenv と pyenv-virtualenv で環境構築](https://qiita.com/Kodaira_/items/feadfef9add468e3a85b)の記事の環境をUbuntu for Windows上で作る用備忘録

もともとUbuntu for Windowsの環境に入ってないものをインストールするだけだけど。

# 環境

```bash
$ uname -a
Linux SDI17-0023 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
```

# install

shellを作ったのでさくっとやりたい方は[こちら](https://gist.github.com/safari029/5893a2f6c5210c573d008301277a50bd)から、shellでは以下作業を行います。

必要なパッケージ類をインストールします。（pyenvでpythonをinstallするときに必要になります）

```bash

$ sudo apt-get install build-essential zlib1g-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev tk-dev python-tk python3-tk
```

pyenvの本体を取得

```bash

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

~/.bash_profileを作成します。

```:~/.bash_profile
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

test -r ~/.bashrc && . ~/.bashrc
```

pyenv-virtualenvをクローン

```bash

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

# pyenv pyenv-virtualenvの基本的な使い方

## 各pythonのインストール

```bash

$ pyenv install -l #install可能な一覧
$ pyenv install 3.6.5 #任意のinstallしたいバージョン
$ pyenv versions #installされているバージョン一覧が表示される
$ pyenv version #現在利用しているバージョン
```

## 環境の指定方法

```bash

# global,local,shellの3種類
# 優先順位 shell→local→global

$ pyenv global 3.6.5 #デフォルトで利用するバージョンを指定
$ pyenv version
3.6.5 (set by /home/myuser/.pyenv/version) #/home/myuser配下で管理されてる。

$ cd /path_to_project/ #任意のディレクトリ上で…
$ pyenv local 3.6.5 #現在のディレクトリ配下で利用するバージョンを指定
$ pyenv version
3.6.5 (set by /path_to_project/.python-version) #対象のプロジェクト配下で管理さｒている。

$ pyenv shell 3.6.5 #現在のshellで利用されるバージョンを指定
$ pyenv version
3.6.5 (set by PYENV_VERSION environment variable)
```

これだけだとinstallされたバージョン毎でpipでinstallする
moduleが共有されている状態なので、プロジェクト単位でmoduleの管理ができない。
そこでvirtualenvの出番。

## virtualenvによる環境構築＆環境の指定方法

```bash

$ cd /path_to_project/
$ pyenv virtualenv 3.6.5 new_3.6.5 #python3.6.5でモジュールが全くinstallされてない環境ができあがる
$ pyenv local new_3.6.5 #環境を利用するには上のglobal,local,shellで指定。プロジェクトでの管理ならlocalでやるのがよさそう。
(new_3.6.5)$ #virtualenv環境を指定するとconsoleの先頭に環境名表示される。
$ pyenv version
new_3.6.5 (set by /path_to_project/.python-version)

#あとはpipで任意のモジュールを追加すればOK
```

この状態でpythonコマンドが使えない。python3.6にリダイレクトされてそんなものはないとなる…python3で起動すればいいみたい。ちょっと不便だね…

```bash

(new_3.6.5)$ python
pyenv: python3.6: command not found

The `python3.6` command exists in these Python versions:
  3.6.5

(new_3.6.5)$ python3
Python 3.6.5 (default, Apr  6 2018, 12:10:51)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

$ pyenv virtualenv --system-site-packages 3.6.5 new_3.6.5_co #ある環境を引き継ぐときは --system-site-packeges optionを利用する。
```

環境の削除

```bash

$ pyenv versions # virtualenv環境も、インストールした素の？pythonも表示される。

$ pyenv uninstall new_3.6.5
pyenv-virtualenv: remove /home/myuser/.pyenv/versions/3.6.5/envs/new_3.6.5? y #yで削除
# 環境を削除しても、ただしpyevn local指定したディレクトリには以下ゴミファイルがのこってるので別途削除したほうがよさそう。
$ cat /path_to_projedt/.python-version
new_3.6.5
$ rm /path_to_projedt/.python-version
```

# 参考にさせていただいたサイト
https://qiita.com/banaoh/items/00aea13fe045fab7e8ba
https://qiita.com/Kodaira_/items/feadfef9add468e3a85b