Qiskit環境構築 [poetry版] (2) Python仮想環境の作成 <Windows11, WSL2, openSuSE,  pyenv, pipx, poetry>

# Qiskit環境構築
当初はpoetryで環境を構築していましたが、uvの方が使いやすいため
下記のuv版の記事を参照してください。poetry版は参考のため残しておきます。

【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)

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

# 概要
　・Windows11/WSL2でのQiskit環境構築手順は需要がありそうなので記載します。
　・IBM Community Japanの2024年ナレッジモール研究に参加した際に使用したQiskit環境の構築手順となります。
　　[IBM Community Japan / ナレッジモール研究](http://qiita.com/)
　・Qiitaの書き方がまだわかっておらず練習を兼ねているため、今後も修正をしていきます。
 
# 本ドキュメントの範囲
  poetryによるPython仮想環境の作成 
  qiskit/vscodeによる量子回路の作成/実行は別ドキュメントで作成予定です。

 ### python仮想環境の構築
これよりQiskit用のPython仮想環境を構築します。
　(1) poetryによる仮想環境(project)の作成
　(2) pyenvによるPythonバージョン設定
　(3) projectのtoml管理
　(4) Qiskitパッケージ導入
```
# Python仮想環境はどこに作ってもよいのですが、ここでは下記ディレクトリに導入します。
# vmPyの下に各プロジェクトディレクトリを作り、vqisがQiskit用Python仮想環境とします。
   ~/work/vmPy/vqis
```
# (1) poetryによる仮想環境(project)の作成
ディレクトリ準備
```bash:ディレクトリ準備
# work用ディレクトリ作成
ls -ld ~/work/vmPy
mkdir -p ~/work/vmPy ; echo $?
ls -ld ~/work/vmPy
cd ~/work/vmPy
pwd
ls -a
```
![opensuse_022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/c449e047-73c4-b114-095b-bcfd4e148dfa.png)

poetry仮想環境作成
```bash:poetry仮想環境作成
# ディレクトリ事前確認
cd ~/work/vmPy
ls -ld vqis

# project名=vqisのPython仮想環境を作成
poetry new vqis ; echo $?

# ディレクトリ確認
ls -ld vqis
```
![opensuse_023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/3b092dee-6f53-84d2-896c-b717a6da8b20.png)

```bash:[参考] srcレイアウト
# [参考] srcレイアウトでPython仮想環境を作成
# --srcオプションでimportパッケージがsrcディレクトリに配置される。
# poetry new --src vqis ; echo $?
[nyanco@suseTW]:~/work/vmPy/vqis
> tree
.
├── README.md
├── pyproject.toml
├── src
│   └── vqis
│       └── __init__.py
└── tests
    └── __init__.py
4 directories, 4 files 
```

# (2) pyenvによるPythonバージョン設定
poetry仮想環境用ディレクトリに入って作業します。
```bash
# projectディレクトリに移動
cd ~/work/vmPy/vqis
pwd

# Pythonバージョン事前確認
pyenv versions
python -V
python3 -V

# pyenvによるPythonバージョン切り替え
pyenv local 3.12.8 ; echo $?
ls -a
cat .python-version

# pyenvによるPythonバージョン事後確認
# ~/work/vmPy/vqisディレクトリの下ではpython3.12.8が使用されるようになる。
pyenv versions
python -V
python3 -V

# poetryによるPythonバージョン切り替え
poetry env info
poetry env use 3.12.8 ; echo $?
poetry env info
```
![opensuse_024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/d0a0809f-fbc3-5a10-64ff-f567e43e78e5.png)
![opensuse_025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/a7f8433c-8e23-971a-d709-9ca91a873c5d.png)
![opensuse_026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/b41a8e62-6111-b77b-d88d-4ee6e7e85269.png)

# (3) projectのtoml管理
・プロジェクトディレクトリの直下に保管されれているファイル"pyproject.toml"で
　プロジェクトのパラメータを設定します。
・主な使い道としては、Pythonのバージョンやパッケージのバージョン指定、
　mypyやcattrs、noxなどの開発ツールのパラメータを設定するなどがあります。

・2025年1月現在、依存パッケージsymengineの導入に失敗するため、
　下記の通りrequires-pythonのバージョン指定を変更します。
　　変更前：requires-python = ">=3.11"　　(3.11以上のPythonを指定)
　　変更後：requires-python = "^3.12.8"  (3.12.8以上、かつ3.13.0未満のPythonを指定)
　　　※バージョンの上限を設定すると依存関係の解消ができなくなることが多いので、
  　　　自分の場合は問題が出ない限り、上限を設定しません。
・"pyproject.toml"をpoetry管理下ではなく、手動で編集した後は、
　poetry updateコマンドを実行します。

```bash:toml編集
# poetryにより作成されたtomlを編集する。
ls -l
# tomlバックアップ
cp -p pyproject.toml pyproject.toml_orig ; echo $?
ls -l
# 編集
vi pyproject.toml
poetry update
# 参照
cat pyproject.toml
```
![suse006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/93cb1482-1aab-ea35-9af0-40396f41302a.png)
![suse007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/6002fe19-eb49-971b-d939-f7fa4f78b11f.png)

```bash:poetry v2.0.0が作成したpyproject.toml(編集前)
[project]
name = "vqis"
version = "0.1.0"
description = ""
authors = [
    {name = "Your Name",email = "you@example.com"}
]
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
]

[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
```
```bash:編集後のpyproject.toml
[project]
name = "vqis"
version = "0.1.0"
description = ""
authors = [
    {name = "Your Name",email = "you@example.com"}
]
readme = "README.md"
#requires-python = ">=3.11"
requires-python = "^3.12.8"
dependencies = [
]

[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
```
# (4) Qiskitパッケージ導入
Python仮想環境Qiskitのパッケージを導入します。

```bash:qiskit関連パッケージ導入
# Python仮想環境ディレクトリに移動
cd ~/work/vmPy/vqis
pwd

# Qiskit関連パッケージ導入
poetry add qiskit qiskit[visualization] qiskit-ibm-runtime ; echo $?

# 2025/1/16現在、 qiskit-aer 0.60.0を導入できないため、
# バージョン指定を使って全バージョンを導入した。
# poetry add qiskit-aer@^0.15.1 ; echo $?

# qiskit-aer
poetry add qiskit-aer ; echo $?

# その他Qiskit関連パッケージ
poetry add qiskit-machine-learning ; echo $?
poetry add qiskit-algorithms ; echo $?

# 導入パッケージのリスト出力
poetry show

# toml確認(導入パッケージがtomlに登録される)
cat pyproject.toml
```
![suse008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/af78643b-23bd-ffef-584b-7fd8416a2f17.png)
![suse009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/10dac9ec-e746-c5f2-2aa0-4900b6c21a27.png)
![suse010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760084/8d1956bd-149b-1402-33e4-373bf02b1516.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)