Python環境構築法 for Windows10

新しいPCが届き，Anacondaを使わずにPython環境の構築を1からやり直したので，整理も兼ねて投稿します．

# 対象者
- Microsoft StoreからPythonをインストールしたくない人．**（ここ重要）**
- Anacondaを使いたくない人．
- Pathを通す作業をなるべくしたくない人．
- pyenvとpipで開発したい人．

------------------------------------------
# 事前準備
- chocolateyがインストールされていること．
- chocolateyのパスが通っており，動作を確認済み．

------------------------------------------
# やり方

## pyenvのインストール
```shell
cinst pyenv-win
```
で`pyenv`をインストールできます．


<details>
<summary>何か聞かれた時はこれを参照</summary>
<div>

```sh:何か聞かれた時
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint)
```

という表示があれば`Y`もしくは`A`と入力してください．
</div>
</details>

------------------------------------------
## インストール可能なPythonのバージョンを探す
```shell
pyenv install -l
```

<details>
<summary>出力例</summary>
<div>

```sh:出力例
...
3.9.1rc1-win32
3.9.1rc1
3.9.1-win32
3.9.1
3.9.2rc1-win32
3.9.2rc1
3.9.2-win32
3.9.2
3.9.3-win32
3.9.3
3.9.4-win32
3.9.4
3.9.5-win32
3.9.5
3.9.6-win32
3.9.6
3.10.0a1-win32
3.10.0a1
3.10.0a2-win32
...
```

調べていないので確証はありませんが
`3.9.6-win32`は32bitのWindows用のPythonがインストールされるのではないかと思います．
とりあえず，バージョンの後に何もついていないものを選べば良いと思います．
</div></details>

------------------------------------------
## 好きなバージョンをインストール（例として3.9.6をインストール）
```shell:Pythonのインストール
pyenv install 3.9.6
```

<details>
<summary>成功例</summary>
<div>

```shell:成功例
:: [Info] :: completed! 3.9.6
```
と出ていれば成功です！
おめでとう！！

</div></details>
<details>
<summary>失敗した時はこちらを参照</summary>
<div>

```shell:
rehash
```
これでもう一度試してください．
</div></details>

------------------------------------------
## インストールできたか確認

```shell
pyenv versions
```
でインストールされているPythonが出力されます．

<details>
<summary>成功例</summary>
<div>

```shell:
* 3.9.6
```
と出ていれば正常にインストールされています．
ちなみに`*`が出ているバージョンが現在，適用されているバージョンです．
</div></details>

------------------------------------------
## 実行できるか確認
```shell:Pythonの実行確認
python -V
# 出力:Python 3.9.6
```
となっていれば成功です．

<details>
<summary>Microsoft Storeが立ち上がる</summary>
<div>
ここで初めて環境変数をいじります．

1. 環境変数ウィンドウを開く．
1. ユーザー環境変数のPathを選択後，編集ボタンをクリック．
1. `%USERPROFILE%/.pyenv/pyenv-win/shims`と`%USERPROFILE%/.pyenv/pyenv-win/bin`を一番上に持ってくる．
<details><summary>↑の2つの値が無い時はこちらを参照</summary><div>

`cinst pyenv-win`の時点でなぜかPathに追加されなかった様なので，Pathを直接編集します．

1. `~/.pyenv/pyenv-win`直下に**shims**と**bin**があることを確認．
1. ユーザー環境変数のPathを選択後，編集ボタンをクリック．
1. 新規ボタンをクリック後，`%USERPROFILE%/.pyenv/pyenv-win/shims`と入力．
1. もう一度新規ボタンをクリック後，`%USERPROFILE%/.pyenv/pyenv-win/bin`と入力．
1. どちらも`%USERPROFILE%/AppData/Local/Microsoft/WindowsApps`より上に移動させる．
</div></details>
</div></details>

<details>
<summary>Pythonのバージョンを切り替える</summary>
<div>

バージョンの切り替えには`global`と`local`の**2種類**があります．<br>
`global`はシステム全体を通して扱うPythonのバージョンを指定できます．<br>
`local`は任意のディレクトリ直下で扱うPythonのバージョンを指定できます．<br>
`local`で指定したバージョンは`global`よりも優先されます．<br>
コマンドは以下の通りです．

```shell:Pythonのバージョン切り替え
pyenv global 3.9.5
# または
pyenv local 3.9.5
```
コマンド実行後に`python -V`を実行して，指定したバージョンが出力されていれば成功です！
</div></details>

------------------------------------------
## 仮想環境を作ろう！そして入ろう！
続いて仮想環境を作ってそこに入ってみましょう！

```shell:仮想環境を作る
cd ~/work_space #好きなディレクトリで良い

pyenv local 3.9.6 #好きなバージョン
ls -a
./  ../  .python-version
# .python-versionにバージョンがメモされる．（これを修正してもバージョンは変わらない）

python -m venv .env #.envは隠しフォルダ名なので好きな名前で良い
ls -a
./  ../  .env/  .python-version
# .envがあれば成功！
```
以上で仮想環境の作成が完了です．

```shell:仮想環境に入る
# Git Bashの場合
source .env/Scripts/activate #仮想環境の有効化

# PowerShellの場合
./.env/Scripts/Activate.ps1 #仮想環境の有効化
```
最後のコマンド実行後
`(.env)`と出ていれば仮想環境に入れています！おめでとう！！
仮想環境から出る時は，Git BashもPowerShellも

```shell:仮想環境から出る
deactivete
```
で出れます．

# Q&A
<details><summary>Chocolateyって？</summary><div>

`Chocolatey`とはCUIでソフトウェアやコマンド類をインストールできるWindows用のパッケージマネージャーです．<br>
簡単に言えば，コマンドでインストールやアンインストールする`App Store`や`GooglePlay Store`です．<br>
インストールするにはPowerShellを管理者権限で起動し，[ここ](https://chocolatey.org/install)にアクセス．真ん中あたりにコピペで動かせるコマンドがあるので，それをコピペ実行で入ります．
Chocolateyを略してChocoと表現したりします．

---
</div></details>

<details><summary>pyenvって？</summary><div>

`pyenv`とはPython用のバージョン管理ツールです．これを使うと様々なバージョンを扱うことができ，公式ページから落として環境変数をいじる必要がなくなります．楽過ぎますね〜
Rubyでいう`rbenv`，Node.jsなら`nvm`のことです．

---
</div></details>

<details><summary>Dockerじゃあかんの？</summary><div>

ただのPython環境で実行するのならそれで良いと思います．楽ですしね．
ただ，CUDAを使いたい場合，現時点（2021/10/13）では楽に環境構築ができません．
CUDA on Dockerを実現するくらいなら仮想環境の方が楽なので，こちらを推します．

---
</div></details>

<details><summary>pyenvで入れた特定のバージョンを消したい</summary><div>

```shell:pyenvで入れたバージョンを消す
pyenv uninstall 3.9.5
```
これで消えます．

---
</div></details>

<details><summary>Chocoで入れたパッケージを消したい</summary><div>

```shell:Chocoのパッケージを消す
chocolatey uninstall PackageName
#または
choco uninstall PackageName
#または
cuninst PackageName
```
これで消えます．ただ，`pyenv`で入れたものまで消えてくれるかは未確認です．
`pyenv uninstall`で消してから`cuninst`するのが無難です．

---
</div></details>

<details><summary>Chocoで入れたパッケージを確認したい</summary><div>

```shell:Chocoで入れたパッケージを確認する
Chocolatey list -localonly
#または
choco list -localonly
#または
clist -localonly
```
でババーと入れたものが出てきます．

---
</div></details>

## 後書き
Pythonの環境構築のやり方は沢山あり，どれが良いかは個人によります．（悪手はありますね... Microsoft Storeから落とすとか）
今回のやり方は一番ではありませんが，個人的に一番シンプルで覚えることも少ないと思っています．
もちろん**Anaconda**を使えば同じこともできますが，こっちの方が重くないのでおすすめです．

## お願い
この記事の内容で **？** となった部分や**記載されていない不具合**についてコメントをください．
わかる範囲でQ&Aに追記して答えていこうと思います！