Qiskit環境構築 [uv版] (1) Linuxの導入/設定 <Windows11, WSL2, openSuSE,  uv>

# 概要
　・Windows11/WSL2でのQiskit環境構築手順は需要があるかもしれないで記載します。
  ・以前、pyenv,pipx,poetry環境構築手順を記載しましたが、uvの方が構築手順が少なく、圧倒的に速いので記載します。

# 環境
　・手順では&lt;Windows11, WSL2, openSuSE LEAP, uv&gt;を組み合わせた環境を構築します。

# 本ドキュメントの範囲
　★(1) windows11へのWSL2の導入
　　(2) uvの導入、Python仮想環境の作成
　　(3) vscode導入/Python仮想環境へのアクセス
　　(4) シミュレータでの量子回路実行(qiskit primitives)
　　(5) IBM Quantum量子コンピュータ実機での量子回路実行 

### WSL2の導入
★windowsのGUI操作を実施します。
　※ubintuを導入する場合は、windows11のpowershell/コマンドプロンプトから
 　'wsl.exe --install"すればwsl2およびubuntu linuxまで自動で導入されるため、この手順は不要です。
　　本手順ではubuntuの導入を避けるため、windowsのコントロールパネルからWSL2を導入します。

　[windows11から下記を実施]
　スタートメニューにcont入力
　　-> コントロールパネル
　　　-> プログラムと機能

![wsl001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/889cb7c8-e68d-e5c6-78d7-06b1aeb6afeb.png)
![wsl002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/93f40913-a09b-71ee-0158-1a403bdb87c8.png)
![wsl003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/5a1476ca-1ffd-b2d7-2a54-79038471a7e6.png)

　「windowsの機能」画面で有効化選択
　　->下記にチェック入れてOK (OK実施後、)再起動要求があります。)
    　　　　■ Hyper-V
    　　　　■ Linux用 Windows サブシステム
    　　　　■ Virtual Machine Platform
![wsl004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/c3052694-db63-bbeb-06b1-79b6eb2b08e0.png)
![wsl005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/2621f47f-2d98-3443-9967-56205913fa77.png)
![wsl006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/f23558b1-724c-42d4-6749-2533f96d4b89.png)
![wsl007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/635032f1-f832-9877-3064-de5195b9ddc1.png)
![wsl007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/bdf2e195-19c6-3151-43f1-37fd838ca97d.png)

### wsl2のアップデート
★Powershellまたはコマンドプロンプトから実行します。
 Powershellまたはコマンドプロンプトを<管理者権限>で開きます。
![wsl009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/d3b9ce05-07fa-e4f3-8e03-56201e20666b.png)

下記コマンドを実行
```powershell:[Powershell]
wsl --version
wsl --update
wsl --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/2b3414de-83e6-4d67-9f69-80112a72cf5b.png)

### openSuSE LEAPの導入
★Powershellまたはコマンドプロンプトから実行します。
WSL2でインストール可能なディストリビューションの一覧を出力
```powershell:[Powershell]
wsl --list --online
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/46adc960-c7b3-4a2b-9e5e-0de79ba24a7d.png)

openSuSE LEAP 15.6を導入します。
```powershell:[Powershell]
wsl --install -d openSUSE-Leap-15.6
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/4030e368-fec3-406c-b4ce-f96526cb1391.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/e330c49b-350c-4874-9444-99a6ab6b5f2d.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/14388f29-a145-4fb7-a690-aa08716bfca2.png)

出力された指示に従って、Powershellコンソールから下記のコマンドを投入してlinuxに接続します。
```powershell:[Powershell]
wsl.exe -d openSUSE-Leap-15.6
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/0d27fb9b-8827-416e-b34a-d767d7c31746.png)

linuxに接続すると、openSuSEの設定ユーティリティYaST2が起動しているので
パネルに従ってユーザ関連の設定をしてきます。
まず&lt;Start&gt;が選択されているので、エンターキーを押して次に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/4f246f50-b079-43eb-a7ee-5bd6eee770de.png)

locale(使用する言語のセット)を設定します。
矢印キーの↑↓でlocaleを選んで、エンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/c4552b28-20eb-493d-bdef-7df007ebc8c2.png)

キーボード配列を設定します。
矢印キーの↑↓で選んで、エンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/6062fb73-f586-44b0-a58b-f801e4a18415.png)

使用許諾契約書を読んで、エンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/e8457585-252a-4b62-8377-e78eeb0d20f4.png)

タイムゾーンを選択して、エンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/79d084ad-5555-419e-bd83-b53c5b77ce36.png)

roptユーザのパスワードを指定して、エンターキーを押します。
記入欄が最初から選択されているのでそのままパスワード文字列を記入できます。
※テキストボックス内でキャレットが点滅しているので選択されていることがわかりますが、
選択されていない場合はtabキーを何度か押すことでテキストボックスを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/efbccdc9-b932-4e42-a7b0-9f0ceb76a2ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/0dad01b2-dd58-4440-97d4-aaf853a49453.png)

もう一度パスワードを入力して、エンターキーを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/39846ab8-de24-4a59-b160-1806ee3ca2c8.png)

ローカルユーザを作成します。
濃い青が選択されているテキストボックスです。
入力したら↑↓キーで他の欄も入力できます。
Username、Password、Password(again)の入力が済んだら、エンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/7cf7865c-08cf-4816-b1ff-3a683aead472.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/7acfccd5-3376-4aab-8ed2-76f7b352bf80.png)

パスワード文字列があまりにも単純すぎるとcracklibでのチェックをパスできずにユーザー作成に失敗します。
その後、ユーザの作成画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/e999c94a-8f54-45b4-b073-570e42d7f240.png)

まあまあ単純なパスワードであれば警告の出力のみでユーザーが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/7409aa0c-c89c-45d3-9420-991060e201f3.png)

[YaST2の途中で失敗した場合]
ESCキーを押してquitできます。
再度、"wsl.exe -d openSUSE-Leap-15.6"コマンド実行でYsSTの最初から実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/ffc0109c-d133-4b03-9414-fc78b59456a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/a879892f-268d-45f6-b426-5f08558aae37.png)

YaST2パネルが終了して、コンソールの画面に戻ります。
この段階ですでにコンソール上ではWSL2のlinuxにログオンしているので注意してください。
linuxのuname -aコマンドを実行すると"microsoft-standard-WSL2"版のlinuxであることがわかります。
exitでいったんコンソールを閉じます。
```bash:環境確認およびexit (Powershellのコンソールだがlinuxログオン状態となっている)
uname -a
exit
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/21324395-7dff-4f96-9ca2-41866f42c5f7.png)

### openSuSE導入後確認
★Powershellまたはコマンドプロンプトから実行します。
wsl -l -vコマンドでwsl2に導入されたディストリビューションの稼働状態を確認します。
```powershell:[Powershell] ディストリビューション稼働状態確認
wsl -l -v
```
サンプルではopenSUSE-Leap-15.6が稼働中であることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/5e175887-7ace-42eb-a6a8-5f2fbbd62545.png)

> 先頭の* : デフォルトのディストリビューション
> openSUSE-Leap-15.6 : 環境名。export/import操作により変更可能。
> Runnung : 稼働中
> VERSION 2 : wslバージョン2

```powershell:[Powershell] 備考(ディストリビューション導入やり直し)
# 導入をやり直したい場合にディストリビューションを削除するコマンド例
wsl -l -v
wsl --unregister openSUSE-Leap-15.6
wsl -l -v
```

### openSuSEへのログイン
windowsのスタートメニューのプログラムに"openSUSE Leap 15.6"が追加されているので起動します。
※プログラムの実体はwindowsの"コンソール"プログラムですが、
　起動後にWSL2内で稼働する"openSUSE-Leap-15.6"にログインしています。
  「hostname,$PS1のカスタマイズやexport/import、ディストリビューション名変更」等のカスタマイズは別のエントリで記載予定。
 ![opensuse_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/9c5cec23-692d-cdd5-9ed2-f9766a7c4531.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/b70a2583-6340-4828-af9c-4de5c551a4ed.png)
![opensuse_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/45d7274f-d689-f8ca-e447-0588d0c2ec0c.png)

### PS1によるコマンドプロンプト変更
プロンプト、コマンド、出力が判別にしくいのでプロンプトを変更します。
```bash:PS1によるコマンドプロンプト変更
ls -l ~/.bashrc
cp -p ~/.bashrc ~/.bashrc_orig ; echo $?
echo 'export PS1="\[\e[0;36m\]\[$(ppwd)\][\u@\h]:\w\n> \[\e[0m\]"' >> ~/.bashrc
source ~/.bashrc
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/f381d072-13f7-46bc-a6b4-5306a7af820e.png)

### openSuSEのアップデート
★linuxコンソールから下記コマンドを一通り実行
※openSuSEのレポジトリからの反応が遅い場合やパッケージの整合性がとれていないタイミングでは
　無理せず別のタイミングで実施してください。
```bash:opensuseのアップデート
# sudoのパスワードを聞かれた場合は、YaST2で設定したパスワードを入力
sudo zypper refresh
# 更新があった場合は "y" を入力してエンター
sudo zypper dup
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/0444ef0a-bf9b-4aa5-a938-97cfb8a6190f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/100c6d1f-5ada-4d1d-af36-c096c1fb5fb2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/a6bea217-3981-4c6c-afba-987b2cb2c149.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/167d6456-66be-4e9d-8b41-cfceca07eedb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/c353fcb5-5bfb-46ad-8775-1c37250efdcb.png)

"sudo zypper dup"の結果、下記のメッセージが出力されていた場合は、openSuSE LEAPを再起動します。
"They should be restarted to benefit from the latest updates."
"実行中のプログラムが、直近のアップグレードにより削除もしくは更新されたファイルを使用しています。"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/33b7e6f5-27aa-40e5-bb5b-5cf0d1deff28.png)

### openSuSEの再起動
★前提作業としてopenSuSEのすべてのターミナルからexitしてください。vscode等起動していれば停止してください。
★openSuSEの再起動はwindowsのpowershellまたはコマンドプロンプトから実行します。

wsl -tオプションでディストリビューションを停止します。
実行後、STATE が "Stopped"になって停止したこと確認します。
```powershell
wsl -l -v
wsl -t openSUSE-Leap-15.6
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/55112cf8-fc56-43bb-bf6a-4be25c13345f.png)

停止状態のディストリビューションを起動するには、windowsのスタートメニューのプログラムに"openSUSE Leap 15.6"を起動してログインすれば完了します。

### openSuSEのパッケージ導入
基本的なパッケージを導入します。
何か聞かれたら、メッセージをちゃんと読んだうえでyを返答します。
    > git　　　　　　　 -> githubへのpush/clone
    > bash-completion　-> uvコマンドの補完
    > screenfetch　　　 -> 環境確認
    > tar 　　　　　　　-> uvの導入で必要 
    > wsl_*　　　　　　  -> wsl用基本パッケージ。
```bash:基本パッケージ導入
# パッケージ導入後、前出の手順でopenSuSEの再起動を実施してください
sudo zypper install -t pattern wsl_base
sudo zypper install -t pattern wsl_gui
sudo zypper install -t pattern wsl_systemd
sudo zypper install git bash-completion screenfetch tar
```

パッケージ導入後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/d4a1bd63-f001-4a41-a604-f624808c85bd.png)

Qiskit環境構築
【uv版】
[(1) Linuxの導入/設定](https://qiita.com/reconcat/items/f30839f3c09600e2a6b2)
[(2) uvの導入/Python仮想環境の作成 ](https://qiita.com/reconcat/items/37a4273547ddd0f6006a)
[(3) vscodeからのPython仮想環境接続](https://qiita.com/reconcat/items/79e1ec4ca9989a08dcd0)

【poetry版】
[(1) Linuxの導入/設定](https://qiita.com/reconcat/items/78ca5bf02fda616d6561)
[(2) Python仮想環境の作成](https://qiita.com/reconcat/items/76507b2743a9f3c40d43)
[(3) vscodeからのPython仮想環境接続](https://qiita.com/reconcat/items/ad4cb6f7c9c273f0ae3f)

【uv/poetry共通】
[(4) シミュレータでの量子回路実行](https://qiita.com/reconcat/items/360d93adddc99a98a3c3)
[(5) IBMQ実機での量子回路実行](https://qiita.com/reconcat/items/4c50c67342d226cb5d7f)
[(6) メンテナンス](https://qiita.com/reconcat/items/50fde8ebf740995f9d7c)