Win11でPythonする環境の構築（Hyper-V,Ubuntu22,Docker,Poetry）

# Hyper-VでUbuntuする
### まずはPowerShellの確認
Powershellの最新バージョンを確認します。
https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows
上記 URL はその時のStable版になります。Stable 版では困る方はバージョンセレクタから変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/4999ec8d-b4d2-490e-a887-da868c453001.png)

Windowsで、PowerShellを起動。Upgradeが必要な場合は通知が出てたりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/c7d494dc-02e5-7c99-fba7-ebada75cfc91.png)

出てこなかった場合は、$PSVersionTable を入力して確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/c59e7894-5598-704a-45c4-e0b97bcf5ccc.png)
pwsh コマンドでも構いません。

管理者モードでPowerShellを起動しての確認もしておきましょう（筆者はこれをしたら、v7.3.7の最新安定板の情報が出るようになりました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/1f732293-b611-49e2-a2b4-ca5ed00bd8d9.png)


#### PowerShellバージョンUp

Updateコマンドを実行するとストアがたちがるので、Nextボタンを押します。
```PS:PowerShell
Invoke-Expression "& { $(Invoke-RestMethod https://aka.ms/install-powershell.ps1) } -UseMSI"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/164e7945-a013-c6ab-da17-7ede7427c48e.png)

バージョンUp完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/e73714d5-ca5b-d75c-de31-8384469da1df.png)

### PowerShellでHyper-Vを有効化
管理者モードでPowerShellを起動して、Hyper-Vを有効化するコマンドを入力します。
```PS:PowerShell
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/f890b89f-20ab-2cf3-2fcf-ea7f9f7e383a.png)
PCの再起動を促されることもあるようです。（筆者の環境は以前にもHyper-V起動したことがあったかもしれないので、聞かれませんでした）
### Ubuntuをダウンロード
https://jp.ubuntu.com/download
2023/10/6時点のLTS（22.04.3LTS）をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/0adc4b84-b8f9-08f8-eb8e-dce26eb89178.png)
4.7GBのISOイメージです。

:::note info
筆者はディスク領域を増やすときに楽なので Ubuntu Desktop を使ってますが、Ubuntu Server でも構いません（ただし、未検証ですので自己責任でお願いします）
:::

### Hyper-Vの起動
アプリメニューに出てこないことも多いので、コマンド検索窓で hyper-v と入力し、Hyper-V マネージャーを起動します。（管理者モードで実行しています。必須かどうかは未確認ですが、なんとなくこっちのほうが安心）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/c0c2f996-627f-e47f-22d1-e66ac5adee02.png)

### Ubuntuの仮想マシンを作成
使用PCの仮想化許容範囲もありますが、Ubuntu Desktop要件のメモリ４GB以上で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/45988c10-c699-ee93-3dbf-bcf65f885b7f.png)
新規VM作成メニューに従って設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/8cdffcbe-f995-8037-d980-7407f4cd3bcf.png)

#### 仮想マシンの使うネットワーク
Hyper-Vだと、外部、内部、プライベート、のいずれかを選択します。
<table>
  <thead>
    <tr>
      <th>Hyper-V</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> 外部 </td> <td>HYPER-VのホストOSに搭載されている物理NICを割り当てる仮想スイッチを経由する場合はブリッジ接続が出来る</td>
  </tr>
  <tr>
    <td> 内部 </td> <td>ホストOSは外部につなぎたいけれど、仮想マシンは外部につなぎたくない場合の設定</td>
  </tr>
  <tr>
    <td> プライベート </td> <td>仮想マシン系のみの独立したネットワークを作成</td>
  </tr>
</table>

筆者環境ではブリッジ接続をしたいので、「外部」での仮想スイッチを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/8b78c655-7165-a81d-a4bf-044e5adb556d.png)
適当な名前を付けます。VLAN IDも特に必要ないので、指定していません。
接続の種類の外部ネットワークに指定するアダプタは使用するWin11端末のネットワークアダプタを指定します。筆者はWiFi利用のため、WiFiアダプタ（Intel(R) WiFi 6 AX201 160MHz）を指定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/93b1f075-f693-144c-f516-caec2e4ca101.png)
作成した仮想スイッチを使用するVMに適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/c190d958-008f-d6e7-e343-09a8c5cc490d.png)

#### 仮想マシン設定
Hyper-Vを始めて使ったときに、はや～～、と感動しました。
その理由は、プロセッサとメモリの設定にあります。
ここの設定は沼るので要注意です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/bac5c3b9-33d0-6dc3-1f4e-64de640633f7.png)

厳密にはアレコレあるんですが、考え方は以下
+ 仮想プロセッサ数は、論理プロセッサからの割り当て数
+ 「リソースコントロール」の母体はHyper-V運用
  + 1台のホストでVM複数作成したときの設定がベース
  + 仮想マシンの予約％：占有したいとき
  + 仮想マシンの限度％：全VM足し算して200になる数まででの％設定
  + 相対的な重み：全VMで重み設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/2e233aa3-4dfa-0f87-c705-843c37569ff1.png)
メモリの割り当てはUbuntu要件がベースの４GB以上、です。
動的メモリの設定上、最大RAMの数がデフォルト1TBなので、ほどよい値に変更必須です。
あるいは、動的メモリのチェックマークを外すことで、使用上限がRAM(R): 欄記載の値となります。

あとは、DVDドライブにダウンロードしておいたUbuntuのISOイメージを設定しておけばOK。

### 仮想マシンの起動（Ubuntuインストール）
マシンを起動します。DVDブートでUbuntuインストールが開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/6ac8e412-d3b5-4655-f6ca-459221027165.png)
起動後、接続して、コンソール画面を参照します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/724a6e6e-a895-ae37-48fb-e5e112afb683.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218645/50b11047-6d32-68b1-2e43-7a63ec250e03.png)

セットアップ等はこちらのサイトが詳しいです。
https://www.server-world.info/query?os=Ubuntu_22.04&p=download

インストールするもの。いずれも、apt install を使用する
+ openssh-server
+ git
+ docker.io
+ docker-compose

## Python(Docker)環境構築
DockerでPython環境を作ります。
参考サイト：　https://book.st-hakky.com/docs/try-poetry-on-docker/

Docker Image用Linuxディストリビューションを選びます。
参考サイト：https://zenn.dev/ken3pei/articles/1abbf7d974cf5d
開発目的なので、1GB近くなりますが、筆者はDebian系のbullseyeを入れます。

Pythonのバージョンは、2023/10時点では3.12.0 が最新でした。

#### コンテナ起動
```Docker:docker-compose
docker-compose up -d --build
docker-compose exec poetryapp bash
```
#### poetryお試し
```PS:poetry
poetry init --no-interaction
poetry add pandas
```
:::note info
poetry add したときに以下のようなメッセージが出ることがあります。
最後の行の記載に従って、pyproject.toml のpython バージョン欄を変更するとうまく行きます。
[tool.poetry.dependencies]
python = "^3.12" ⇒　>=3.12,<3.13"

  ~ Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties
For numpy, a possible solution would be to set the `python` property to ">=3.12,<3.13"
:::
### 最後に
Pythonの開発環境って、どこまでどの程度出来上がれば便利でうまく使いこなせるのか、よくわかってませんが、少なくともバージョン揃えとか、環境を汚さない、とかは出来そうです。

本当はVSCodeからPythonを使うつもりだったんですが、好みの指向性が Linux >>> Windows なので、Teratermで使えるようになった時点で満足してしまいました。

### 参考にしたサイト

https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows
https://www.server-world.info/query?os=Ubuntu_22.04&p=download
https://book.st-hakky.com/docs/try-poetry-on-docker/
https://zenn.dev/ken3pei/articles/1abbf7d974cf5d