WSL2+asdf+venvでのpython環境構築メモ

# 環境構築
:::note info
2023/04/25　更新(CUDAのインストール方法を追加)
:::
## はじめに
メモ兼共有用
## 実行環境
- windows11 + WSL2で実行
- VSCode + Remote WSLが入っていることを前提
- ubuntu20.04でも基本は同じ(WSL2インストールパートを飛ばしてください）
## 実際の使用方法
先に使い方を書いときます
```sh
# 作業するディレクトリの作成
mkdir myproject
cd myproject
# pythonのバージョンの設定
# asdf install python <使用するバージョン>
asdf local python <使用するバージョン>
# 仮想環境の作成
python -m venv .venv
source .venv/bin/activate
# パッケージのインストール
pip install <packagename>
# 実行
python <実行するファイル名>
```

## WSL2のインストール
### WSL2とは
WindowsでLinuxが動かせる、すごい！便利！
### WSL2だと何がいいの
- コマンド一つでWindows内にUbuntu環境を作成できる
- デュアルブートでUbuntu入れてる場合、何かトラブった場合にCドライブを共有しているため最悪Windows側に影響与える可能性あり
- windows側からエクスプローラーでファイルを見ることができるので慣れてなくても直感的
- VSCodeの拡張でWSLを入れていれば簡単に操作
### インストール
powershellを管理者として実行した上で
```powershell: powershell
wsl --install
```
と打つだけ、簡単  
初期設定（ユーザー名,パスワード）し終わったあと
```bash: bash
sudo apt update
sudo apt upgrade -y
```
を忘れずに  
またwsl2のubuntuだと何も入ってないがちなので以下を実行
```bash:bash
sudo apt install \
    build-essential \
    curl \
    libbz2-dev \
    libffi-dev \
    liblzma-dev \
    libncursesw5-dev \
    libreadline-dev \
    libsqlite3-dev \
    libssl-dev \
    libxml2-dev \
    libxmlsec1-dev \
    llvm \
    make \
    tk-dev \
    wget \
    xz-utils \
    zlib1g-dev
```

## CUDAのインストール
機械学習でGPUを用いる場合CUDAをインストールしないといけない

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local

公式サイトに従いインストールする
```bash
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda-repo-wsl-ubuntu-12-1-local_12.1.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-1-local_12.1.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
```
インストール後にターミナルで`nvidia-smi`と入力してGPUの情報が出力されてればOK
## シェルをzshに変更(任意)
ubuntu標準では`bash`なので`zsh`に変更
- zsh: つよい
- bash: ふるい

### 変更
```bash: bash
chsh -s /bin/zsh
```
### zshがない場合`apt install`する
```bash:bash
sudo apt install zsh
```


## Python仮想環境の構築
Dockerを使うか直接仮想環境を作るかのどっちかがあるがここではDockerは説明しない

### asdf(バージョン管理)
python等のバージョン管理ソフト(pyenv, ...）を管理するやつ

https://asdf-vm.com

インストール方法は上記に書いてあるので基本はその通りに  
わからない場合↓


#### インストール方法
:::note warn
2023/04/25時点でのインストール方法です
公式サイトを確認してください
:::
```bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
```
として、`~/.bashrc`に以下を追加
```bash
. $HOME/.asdf/asdf.sh
```
追加の仕方は `vi ~/.bashrc`としてvimで開く
もしくは
```sh
echo ". '$HOME/.asdf/asdf.sh'" > ~/.bashrc
```

zshにした場合は`~/.zshrc`に追加

#### プラグインのインストール
```bash:bash
asdf plugin-add python
```
#### 指定したバージョンのpythonのインストール
`asdf install python バージョン`で任意のバージョンのpythonをインストール出来る
```bash:bash
asdf install python 3.9.13
asdf install python 3.8.6
```
#### グローバルでの指定
```bash:bash
asdf global python 3.9.13
```
とすると、ubuntu全体で指定したバージョンとなる(`python -V`で確認)

#### あるディレクトリだけ指定したい場合（こっちをよく使う）
そのディレクトリ下で、
```bash:bash
asdf local python 3.8.6
```
とすると、そのディレクトリ内だけ指定したバージョンになる（便利）
#### venvで仮想環境の作成
ディレクトリ下で
```bash:bash
# python -m venv <仮想環境名>
python -m venv .venv
```
とするとディレクトリ下に`.venv`フォルダが作成される
基本的には仮想環境名は`.venv`または`venv`が推奨

#### 仮想環境の入り方
```bash:bash
# source <仮想環境名>/bin/activate
source .venv/bin/avtivate
```
とすると仮想環境内に入れて、ターミナルの表示が
```
(.venv)$
```
となる。
この中で`pip install`で必要なライブラリをインストールすればOK

入るのがいちいち面倒くさいが、VSCodeで一度仮想環境に入れば次回以降仮想環境が存在するディレクトリを開けば勝手に仮想環境に入る（便利）

出るときは
```:bash
(.venv)$ deactivate
```
とすればOK

## 最後に
poetryを使う場合はasdf plugin-add poetryでpoetryもasdfで管理可能
pytorchやtensorflowのバージョンによってはCUDAのバージョンが指定されていることがある
→Dockerを使いましょう