pyenv と pyenv-virtualenv をインストールする

## はじめに
pyenvのインストールに関する情報は溢れかえっていますが、ubuntuではsudoを使用する際にパスがsecure_pathで上書きされてしまい、pyenvを認識してくれなくなる問題の解決を含めて残します。

公式のGitHubリポジトリは[こちら](https://github.com/pyenv/pyenv)

環境
OS: Debian 9.0 stretch
Python: 3.6.3

更新
2019.01.29
apt-getをaptに変更しました

## gitのinstall
まずはpyenvをinstallするためにgitを入れる必要があります。
(インストール中の(Y/n)はY(=Yesの意味)としてください)

```bash
sudo apt update
sudo apt install -y git
```

## pyenvのinstall
githubからリポジトリをcloneします。

```bash
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```

その後、.profile(.bash_profile)へパスを追加します。(ところで→[「.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの？」](http://qiita.com/hirokishirai/items/5a529c8395c4b336bf31))

(初めての人向け)
 `/home/USERNAME` 以下に.profileがあるかどうか一度 `ls -al ~/` で確認しておくと無駄にはまらないで済むかもしれませんね。

```bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.profile
```

これは1行目で*PYENV_ROOT*という環境変数を設定し, 2行目で環境変数*PATH*に*PYENV_ROOT/bin*を追加する、という処理ですね。
ここで.profile(.bash_profile)を再度読み込むことで追記した設定を適用してください。

```bash
source ~/.profile
```

.profileを再度読み込みました。

もちろん、vimなど何かしらのエディタを使用して.profile(.bash_profile)を開き

```bash
sudo vim ~/.profile
```

以下を追記しても同じことです。

```bash
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
```

その後

```bash
which pyenv
```

を実行し

```bash
/home/USERNAME/.pyenv/bin/pyenv
```

のような結果が返えればOKです。

## (ubuntuの場合)groupの追加とsudoersファイル編集
これは```$sudo pyenv```時にPATHが引き継がれずにエラーとなる問題の解決です。
色々な解決法がありますが、以下が最も良さそうなので参照させてもらいました。
Debianでも同様な事象は発生するのですが、sudoなしでもpyenv install可能なので、以下はubuntuの場合のみの対応でよいと思います。
[【Ubuntu】sudoする際にPATHをどう引き継ぐか](http://qiita.com/hidekuro/items/0f8acd0504baa6efde34)
なお、**```USERNAME```部分は自分のユーザ名に変更してください。**

```bash
sudo groupadd developer
sudo gpasswd --add USERNAME developer
sudo visudo
```

```sudoers
Defaults exempt_group="developer"
```

この後は再度sshログインをしなおすのが確実です。

## pythonのinstall

その前に必要なツールをインストールします。

```bash
sudo apt install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
```

と、ここで一度、現在何をインストール可能なのか確認してみましょう。

```bash
pyenv install --list
```

ずらーっとインストール可能なものが羅列されます。

ここではPython3.6.3をinstallします。
**(なお, ここでオプションをつけないとmod_wsgiがinstallできないので注意)**
なお、ubuntuの場合はsudoをつけて実行してください

```bash
pyenv install 3.6.3
#後々にpythonパッケージとしてmod_wsgiをインストールする場合、下記のオプション付でインストールを行います
#env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.3
```

3.6.3がinstallされていることを確認

```bash
pyenv versions
```

を実行すると

```bash
* system
  3.6.3 (set by /home/USER_NAME/.pyenv/version)
```

で3.6.3が追加されていることが確認できます。

pythonを変更し, pipを最新版に更新しておくとよいかと思います。
ちなみに、globalとlocalの違いはこちらを(→[pyenvのpyenv local と pyenv globalの違い](https://teratail.com/questions/25930))。環境を分けるツールなので、基本的にはlocalを使用することが多いと思います。
またまたubuntuの場合にはsudoをつけてください。

```bash
pyenv global 3.6.3
pip install --upgrade pip
```	

## ついでにpyenv-virtualenvのインストール
pyenvに続いて、pyenv-virtualenvというプラグインもインストールします。

```bash
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
```

.profile(.bash_profile)への追記です。

```bash
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.profile
```

pyenvと同様に.profile(.bash_profile)を再度読み込むことで追記した設定を適用してください。

```bash
source ~/.profile
```

その後、新しい環境```myenv```を作成してみます。
ubuntuではsudoです。

```bash
pyenv virtualenv 3.6.3 myenv

# なお、このようなオプションがあります
# --system-site-packages  <- インストール済みモジュールを使用する
# --no-site-packages      <- インストール済みモジュールを全て外した状態で仮想環境が作成される

# 例えば、既に3.6.3環境にインストールされているモジュールを引き継ぐ場合は
# pyenv virtualenv --system-site-packages 3.6.3 myenv
```

バージョンの一覧を確認することでmyenvが作成されていることがわかると思います。

```bash
pyenv versions
  system
* 3.6.3 (set by /home/USERNAME/.pyenv/version)
  3.6.3/envs/myenv
  myenv
```