Qiskit環境構築 [uv版] (2)uvの導入/Python仮想環境の作成 <Windows11, WSL2, openSuSE,  uv>

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


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

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

### python仮想環境の構築
　(2-1) uv導入
　(2-2) Python導入
　(2-3) Python仮想環境作成
　(2-4) Qiskitパッケージ導入
　(2-5) パッケージのupgrade
　(2-6) &lt;参考&gt;Python仮想環境のactivate/deactivate

# (2-1) uv導入
[uv](https://github.com/astral-sh/uv)参照
```bash:uv導入
# uv が ~/.local 以下に配置される。
curl -LsSf https://astral.sh/uv/install.sh | sh ; echo $?

# uvのアップデート
source ~/.bashrc
uv self update ; echo $?

# uvコマンド自動補完設定
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc
source ~/.bashrc

# 確認
uv --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/f11124c2-105e-4bd7-a380-88f3b228a21e.png)

```bash:[参考] uv削除
# ~/.bashrcの下記のエントリ削除
eval "$(uv generate-shell-completion bash)"

uv cache clean

# ex.　/home/nyanco/.local/share/uv/python
rm -r "$(uv python dir)" ; echo $?  

# ex. /home/nyanco/.local/share/uv/tools
rm -r "$(uv tool dir)"   ; echo $?  

rm -r ~/.local/bin/uv ~/.local/bin/uvx ; echo $? 
```

# (2-2) Python導入
Python仮想環境で使用したいバージョンのPythonを導入
```bash:Python導入
#--- 確認
# 導入可能バージョン一覧
uv python list --all-platforms

# 導入済みバージョン一覧
uv python list --only-installed

# 好きなバージョンのPythonを導入
# Python 導入 (astralが用意したバイナリが導入される)
uv python install 3.12.9 ; echo $?
uv python install 3.13.2 ; echo $?
# 確認
uv python list --only-installed
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/75a200b5-b2f7-4da2-a514-6388f77059f2.png)

# (2-3) Python仮想環境作成
Python仮想環境作成場所は特に決まりはない。
例では下記のディレクトリに作成
　　~/work/vmPy/vqis
workは作業用。vmPyはPython仮想環境用。vqisはQiskit環境用。
```bash:Python仮想環境作成
#--- 作業用ディレクトリ作成
mkdir -p ~/work/vmPy ; echo $?
cd ~/work/vmPy
pwd

#---Pythonプロジェクトの作成(init)
# オプションを指定しない場合は、一番新しいpythonが使用される。
# pythonのバージョンを指定したい場合は下記のとおり
# uv init vqis -p 3.12.8 ; echo $?
uv init vqis ; echo $?
ls -ld vqis

#---Python仮想環境の作成
# プロジェクトのディレクトリへ移動
cd vqis

# 仮想環境の作成(sync)
# uv は最初にプロジェクトコマンド(run,sync,lock)を
# 実行した際にPython仮想環境(.venv)を作成する。
uv sync

# 確認
ls -la
cat .python-version
cat pyproject.toml
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/aa8333f9-89d1-4cae-a42e-f1b9d6fa5782.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/b69849b0-ef23-489b-a3cc-340c124c9c0c.png)

# (2-4) Qiskitパッケージ導入
```bash:Qiskitパッケージ導入
# qiskit導入
uv add qiskit qiskit-aer qiskit[visualization] qiskit-ibm-runtime ; echo $?
uv add qiskit-machine-learning qiskit-algorithms ; echo $?

# ipykernel導入 (vscodeからの接続で使用)
uv add ipykernel --dev ; echo $?

# toml確認
cat ~/work/vmPy/vqis/pyproject.toml
```
# (2-5) パッケージのupgrade
Python仮想環境のパッケージを一括upgradeする。
* パッケージの更新には2つのファイルが関わってきます。
```bash:プロジェクトのファイル一覧
[nyanco@suseLeap]:~/work/vmPy/vqis
> ls -l
total 148
-rw-r--r-- 1 nyanco users      0  3月 21 12:04 README.md
-rw-r--r-- 1 nyanco users     82  3月 21 12:04 main.py
-rw-r--r-- 1 nyanco users    342  3月 21 12:05 pyproject.toml
drwxr-xr-x 7 nyanco users   4096  4月  5 02:07 src
-rw-r--r-- 1 nyanco users 131844  3月 21 12:05 uv.lock
```
　- pyproject.toml
　　　仮想環境に必要なライブラリとそのバージョン制約を定義。
　　　制約の範囲内である程度自由があるので、pyproject.tomlを使えば他の環境でも柔軟に同様のライブラリを導入できる。
　- uv.lock
　  　仮想環境で実際にインストールすべきライブラリとそのバージョンを完全に決めうちした台帳
    　uv.lockを使って他の環境でも全く同じライブラリを導入することができるが、
　　　柔軟性がないので異なるアーキテクチャ間では導入できないこともある。
* パッケージの一括upgradeには主に下記の流れが考えられます。
　どっちでもいいのですが、ここでは-2- uv.lockでの管理手順を記載します。
　-1- uv sync --upgrade による直接upgrade後のuv.lock
　  　最初にライブラリを導入した後に、導入ライブラリ情報をもとにuv.lockを更新。
　-2- uv lock --upgrade によるuv.lock更新後のuv sync
　  　最初にuv.lockを更新した後に、uv.lockをもとにしてライブラリ導入。

```bash:パッケージの一括upgrade
# Python仮想環境のディレクトリに移動
cd ~/work/vmPy/vqis

#------ uv.lockの更新
#--- test実行
uv lock --dry-run --upgrade ; echo $?

#--- 更新
uv lock --upgrade ; echo $?

#------ uv.lockをもとにしたパッケージ導入
#--- test
uv sync --dry-run ; echo $?

#--- 実行
uv sync ; echo $?
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/ddda1c21-9761-49b6-99c3-7a7f85f0006b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/1bf426de-88d9-4c28-9034-3bc975ec99ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/13f87244-7ed7-4c4c-9bca-66efb0b91790.png)


# (2-6)&lt;参考&gt;Python仮想環境のactivate/deactivate
vscodeからではなくコンソールからPython仮想環境を
利用する場合、activateしてからスクリプトを実行する。

Python仮想環境をアクティベート
```bash:仮想環境のactivate
# 仮想環境ディレクトリへ移動
cd ~/work/vmPy/vqis
pwd

# activate
# コマンドプロンプトが変化したことを確認
source .venv/bin/activate

# deactivate
deactivate
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/50457c4c-ddc9-49a7-b3f0-caf07030d4fb.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)