Windows 10 で pyenv + pipenv の環境で Pythonを使いたい

## ゴール
1. pyenv でPythonのバージョン切り替えを行う
2. pipenv でパッケージの管理を行う


## pyenv-win 

### 1. pyenv-win のZIPを展開
[GitHub](https://github.com/pyenv-win/pyenv-win) の *Installation* にある ZIP を使う方法でインストールします。

[masterブランチのZIP](https://github.com/pyenv-win/pyenv-win/archive/master.zip)をダウンロードして、環境変数 `%USERPROFILE%` が指すディレクトリ(多くの場合は `C:\Users\[ユーザ名]` )に展開します。

展開すると下のファイルとディレクトリが展開されるので、ディレクトリ `pyenv-win-master` を `.pyenv` に変更します。

```:master.zipのファイル構成
pyenv-win-master
│  .gitignore
│  .python-version
│  .version
│  LICENSE
│  mirrors.txt
│  README.md
│  requirements.txt
│  setup.py
│  _config.yml
│
├─.github
│  └─ISSUE_TEMPLATE
│          bug_report.md
│          feature_request.md
│
├─pyenv-win
│  │  __init__.py
│  │
│  ├─bin
│  │      pyenv
│  │      pyenv.bat
│  │
│  └─libexec
│          pyenv---version.bat
│          pyenv-commands.bat
│          pyenv-duplicate.bat
│          pyenv-exec.bat
│          pyenv-export.bat
│          pyenv-global.bat
│          pyenv-help.bat
│          pyenv-install.vbs
│          pyenv-local.bat
│          pyenv-rehash.bat
│          pyenv-shell.bat
│          pyenv-shims.bat
│          pyenv-uninstall.vbs
│          pyenv-version.bat
│          pyenv-versions.bat
│          pyenv-whence.bat
│          pyenv-which.bat
│          pyenv.vbs
│
└─tests
        test_install.bat
        test_uninstall.bat
```

変更後にdir コマンドで `pyenv` コマンドの位置を確認します。

```bat
cmd> dir %USERPROFILE%\.pyenv\pyenv-win\bin\pyenv
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は BA29-3C85 です

 C:\Users\example-user\.pyenv\pyenv-win\bin のディレクトリ

2020/02/09  22:07                55 pyenv
               1 個のファイル                  55 バイト
               0 個のディレクトリ  790,862,061,568 バイトの空き領域

```

### 2.環境変数を設定

1つの環境変数を追加して、`PATH` に2つのディレクトリを追加します。

- 新しい環境変数
  - PYENV : `%USERPROFILE%\.pyenv\pyenv-win`
- 環境変数PATHの先頭に追加
  - %PYENV%\bin
  - %PYENV%\shims

### 3.pyenv で利用する Pythonのバージョンを指定する

- まずは、 `pyenv install -l` でインストール可能なバージョンを確認します。
- 次に、必要なバージョンをインストールします。 3.8.1 であれば `pyenv install 3.8.1` を実行します。
- そして使うバージョンを指定します。 `pyenv local 3.8.1` 
- 最後に `%USERPROFILE%\.pyenv\pyenv-win\shims%` を更新するために `pyenv rehash` を実行します。

### 4.設定結果を確認

`python --version` と `pip --version` を実行して指定したバージョンであることを確認します。

```
cmd>python --version
Python 3.8.1

cmd>pip --version
pip 20.0.2 from c:\users\example-user\.pyenv\pyenv-win\versions\3.8.1\lib\site-packages\pip (python 3.8)
```

### 5.うまくいかない場合


#### pythonを実行すると Microsoft Storeが立ち上がる

`python` を実行して下の Microsoft Store が表示される場合には2つの原因が考えられます。

1. `%USERPROFILE%\.pyenv\pyenv-win\shims` ディレクトリが空になっている。この場合は `pyenv rehash` を実行して、 `%USERPROFILE%\.pyenv\pyenv-win\shims` ディレクトリの内容を更新します。
2. 環境変数 `Path` に定義されているディレクトリの順番が `%USERPROFILE%\AppData\Local\Microsoft\WindowsApps` の後に `%PYENV%\shims` がある。この場合は  `%PYENV%\shims` を先にします。

![2020-04-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145742/9b28c563-a042-18cc-9dba-ffed6214c728.png)


### pipでインストールしたパッケージのコマンドを実行できない

`pyenv rehash` を実行して `%PYENV%\shims` を更新します。

## pipenv

`pip` でインストールして、 `pyenv rehash` を行います。

```
cmd> pip install pipenv
cmd> pyenv rehash
cmd> pipenv --version
pipenv, version 2018.11.26
```

これでインストールが完了したので、`pipenv install ` で必要なパッケージをインストールします。