Windows10にpyenvを入れてバージョン切り替え可能なpython環境をつくってみる

# やりたいこと
- Windows10環境に好きなバージョンのPythonを入れる
- Pythonのバージョンを切り替えられる様にする

# 結果
- pyenvを使える様にすることでバージョンを切り替え可能
- Micorsoft Storeのpythonは切り替えなどに向いてなさそう
- mac+brewに比べると手間がかかった（mac+brewのすばらしさを再認識）

# 以下、やったこと

## Micorsoft StoreのPython（今回はパス）

便利になった。
Windows10の最近のUpdateにおいて、Pythonがインストールされてない状態で、
cmdより、

```cmd:cmd
C:\Users\username>python
```

と入力すると、Micorsoft Storeから最新版のPythonをインストールできる！？

![python_win10_default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435600/599df586-3170-62af-979f-26d36705db25.png)

とりあえず入ってOKであれば、これで良いと思います。
今回は **「バージョンを切り替えたりすることを想定したいのでパス」** します。

追記：
どうやらpathの通ってるところにMicrosoft Storeへ接続するpython.exeがいるらしい[^1]

[^1]: %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\python.exe というのが呼ばれてるらしい。python入れたら、これよりも上位にpathを切る必要があります。



## Pythonの切り替え管理はできる？
最近の言語はなんだかんだ、なんとかenv（nodejs→nodenv）みたいので、バージョン切り替えするものがあったりします。
pythonもあると思うので、公式サイトやぐぐったりしてみると、pyenvはちゃんとありそうです。
そしてwindowsの場合だと、**pyenv-win**というのが、公式的にも良いらしい。

## pyenv-winの導入
今回はこれを入れることにする。

大まかな手順は以下。
- pyenv-winのファイル一式を取得
- ローカルフォルダに格納する
- pathを通す

### pyenv-winのファイル一式を取得
pyenv-winのgitからファイル一式を取得します（ブランチはmasterです）。

> https://github.com/pyenv-win/pyenv-win

git cloneでもよいですし、zipダウンロードでもよいです。
自分は楽したいので、URLでダウンロードしちゃいました（コマンドラインだけ派のみなさまごめんなさい）

> https://github.com/pyenv-win/pyenv-win/archive/master.zip

### ローカルフォルダに格納する

インストール先の準備します。

> %userprofile%\\.pyenv

にします。
（どのサイトみても、ここにしてるからです☆）

zipを解凍すると中身は
- .github
- pyenv-win
- tests
などですが、これら全部（ファイルもフォルダも）→ %userprofile%\\.pyenv の中に入れます。

> C:\Users\username\\.pyenv\pyenv-win

みたいな感じになるはずです。

### pathを通す
pathを通します。

> %USERPROFILE%\\.pyenv\pyenv-win\bin\pyenv

をpyenvと入力して動く様にしたいのと、

> %USERPROFILE%\\.pyenv\pyenv-win\shims\python
> %USERPROFILE%\\.pyenv\pyenv-win\shims\pip

pyenvによって有効になっているpythonやpipが格納される予定のところを動く様にしたいので、
環境変数としてpathに

> %USERPROFILE%\\.pyenv\pyenv-win\bin
> %USERPROFILE%\\.pyenv\pyenv-win\shims

を登録します。
（ほかを優先する必要がないと思ったので優先度を一番上にしました。Windows10は順番を入れ替えできるのですごく楽ですね）

![windows10_path_set.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435600/66ba5ceb-1dc8-fcbb-1033-0c819143cfea.png)

登録後にcmd開いて、

```cmd:cmd
> where pyenv
C:\Users\username\.pyenv\pyenv-win\bin\pyenv
C:\Users\username\.pyenv\pyenv-win\bin\pyenv.bat
```

の結果が帰ってくれば大丈夫です。
"C:\Users\username"の部分はその時のユーザホームディレクトリに変換されてると思います。

```cmd:cmd
INFO: Could not find files for the given pattern(s).
```

の場合はpathが通ってませんので、pathとpyenv-winの場所が正しいか確認する必要があります。
それ以外のpathを示した場合はpathの順位がおかしいと思うので順位確認ですね。

コマンドを認識していれば、以下の様に動きます。

```cmd:cmd
> pyenv
pyenv 2.64.9
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands     List all available pyenv commands
   duplicate    Creates a duplicate python environment
   local        Set or show the local application-specific Python version
   global       Set or show the global Python version
   shell        Set or show the shell-specific Python version
   install      Install a Python version using python-build
   uninstall    Uninstall a specific Python version
   update       Update the cached version DB
   rehash       Rehash pyenv shims (run this after installing executables)
   vname        Show the current Python version
   version      Show the current Python version and its origin
   version-name Show the current Python version
   versions     List all Python versions available to pyenv
   exec         Runs an executable by first preparing PATH so that the selected Python
   which        Display the full path to an executable
   whence       List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv-win/pyenv-win#readme
```

### pythonをバージョン指定でインストールしてみる

インストールできるバージョン一覧をみる。

```cmd:cmd
> pyenv install --list
```

でインストールできるバージョン一覧がでます。
今回は試しに 3.9.6 でいくでござる。
（これを書いているタイミングで3.10.xはまだ安定版ではないゆえ）

```cmd:cmd
> pyenv install 3.9.6
```

これでインストール完了すると思います。

```cmd:cmd
> where python
C:\Users\username\.pyenv\pyenv-win\shims\python
C:\Users\username\.pyenv\pyenv-win\shims\python.bat
C:\Users\username\AppData\Local\Microsoft\WindowsApps\python.exe
```

みたいになると思います。
（最後のやつはMicrosoft Storeに飛ばしてくれるやつだと思います。たぶん）

```cmd:cmd
> where pip
C:\Users\username\.pyenv\pyenv-win\shims\pip
C:\Users\username\.pyenv\pyenv-win\shims\pip.bat
```

こちらも、大丈夫そうです。

### 2x系を追加インストール

切り替えの試しに2.x系を入れてみます

```cmd:cmd
> pyenv install 2.7.18
```
これで入ります。

```cmd:cmd
> pyenv versions
  2.7.18
  3.9.6
```
2系と3系が入りました。

### 2.7.18へ切り替え
切り替え実施

```cmd:cmd
> pyenv global 2.7.18
```

バージョンを確認してみる

```cmd:cmd
> python --version
Python 2.7.18
```

### 3.9.6へ切り替え
切り替え実施

```cmd:cmd
> pyenv global 3.9.6
```

バージョンを確認してみる

```cmd:cmd
> python --version
Python 3.9.6
```

いい感じで出来ました。