pyenvを使わないでpoetryを使えるか検証してみて今更分かったこと

<h2>①結論</h2>

<h3>　poetry、Pythonの各インタープリターを Linuxにインストールしておけば、「ある程度」はpyenvを使わずともpoetryのみでpythonのインタープリターのバージョン指定も各プロジェクト作成時にできる。</h3>

　※今回pyenvをインストールしたものの、[pyenv](#pyenvとは) によるpythonのバージョン変更に手こずり、[poetry](#poetryの概要)だけでなんとかできないかなあ(´д｀)と思って以下の[主な参考資料①～③、⑥～⑧](#主な参考資料) 及び、公式docのIntroduction（の With the official installer）・Basic usageあたりを読んだり、Chat-GPT（3.5ですが・・・(-_-;)）に聞いたりしながら沼に嵌まったときの備忘録です。**（必要に応じて「〇pythonはどこにインストールされるか」から読んでもらえば主旨は伝わるかと思います。）**

## ②poetryの概要

<h4>poetry：Python外部モジュールのパッケージ管理と依存関係の管理を簡単にしてくれるパッケージ管理システム</h4>

※ Javascript、Node.js（Javascriptの実行環境の1つ：（※[主な参考資料⑨](#主な参考資料)参照）） におけるnpmのようなもの

https://python-poetry.org/docs/

<h4>※本Qiita筆者の作業環境</h4>

筆者は、基本Windowsユーザーで勤務先の会社も基本的にどうやら全てWindowsぽいです。エディターは基本的にVScodeを利用しています

<h2>③沼った原因の根幹（ベテランの人からするとしょうもない理解度だと思うのですが・・(-_-;)）</h2>
　例えば同じcurlコマンド等を使っていても

〇 [wsl（Windows System for Linux）など使ってインストールしたもの](#ここから本題) ⇒ Linuxフォルダの中のフォルダにインストールされる

〇 [wslを使わずLinuxないしUbuntu等のディストリビーションをインストールしたもの](#ここから本題) ⇒ 「C:\Users\各個人設定のユーザー名\AppData\Local\Programs」または「C:\Users\各個人設定のユーザー名」

にインストールされたファイルがある。

## ④pyenvとは

　**pyenvは、例えば、Python3.9.6とPython3.11.3等、Python インタープリターそのもの（https://www.python.org/ ）のバージョン管理ツールで、複数のバージョンの Python を同時にインストールし、プロジェクトごとに異なるバージョンを簡単に切り替えられるようにするためのもの**です。

※外部ライブラリーをPyPI（つよつよの人がガンガン自分で作ったPythonの外部ライブラリー・外部モジュールを挙げているOSSのリポジトリ：https://pypi.org/ ） や公式docからインストールして使うにあたり、**「このバージョンはサポートされていません」** ということがPythonはガンガン起こります。

____
<h3>※poetryはこの「このバージョンはサポートされていません」状態をかなり簡単に解消してくれます。（というか最初の段階で丁度いいバージョンを選んでくれます）</h3>

<details><summary>使ってみた例</summary>

<h4>例1：現在使っているPythonのバージョンでは使えない外部モジュールをインストールしようとして「バージョン合ってないっす(・ω<)」とはねられたときのターミナルの様子</h4>

![poetry依存関係に問題がある場合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/b9dea622-b928-97e7-0c63-f38dc03b0eff.png)

<h4>例2：無事に外部モジュールをインストールできたときのターミナルの様子</h4>

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/4bdcfd3f-119f-483c-2ea8-aa65f4d0f6ac.png)

</details>

# 検証してみた・調べてみた過程
<h2>⑤そもそも poetry・pyenvはそれぞれどこにインストールされるのか・するべきなのか</h2>

<h3>（i）poetry も pyenv も基本的にはLinuxにインストールして使うらしい</h3>

<details><summary>Linuxとは</summary>

基本的に無料で利用可能なオープンソースのOS（Operating System）。Ubuntu（ウブントゥ）、Debian（デビアン）など、さまざまな「ディストリビューション」と呼ばれるバージョンがあります。（詳しくは例えば以下の資料を参照してください。）

Linuxの基礎知識をまとめてみた　@yuuu1654 (ゆう) さん Qiita
https://qiita.com/yuuu1654/items/ea1ec653170589bd2b50
</details>

なお自分は、[主な参考資料④](#主な参考資料)で dockerを学習する過程でLinux（厳密にはUbuntu）の操作の本当に初歩の初歩だけ学習しました。

<h3>（ii）インストールの方法：Windowsでwslコマンド使って Linux にPoetryらをインストールしてみる</h3>

コマンドプロンプト・WindowsPowershell・Git for Windowsをいずれかを開いて、とりあえず次のwsl（Windows System for Linux）コマンドを使います。

```powershell
wsl
```
例えば、WindowsPowershellを開いてwslコマンドを使うと次のようになります。

![windowspowershell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/82673430-af8e-4c50-c3b9-345632d88da3.png)

この後、例えば poetry をインストールをする場合は、上記の公式 doc のInstallation の With the official installer タブに従い、
```powershell
$ curl -sSL https://install.python-poetry.org | python3 -
#コピペするときは「$」以降を使用してください
```
を使うとpoetryがインストールできます。無事にインストールできた場合は、wslを起動した状態で
```powershell
$ poetry --version
#コピペするときは「$」以降を使用してください
```
を使うとインストールしたpoetryのバージョン（の数字）が表示されます。

なお、他に外部ライブラリーをインストールする方法として広く用いられているpipコマンド同様に poetry 自身をバージョンアップするコマンドも上記の にWith the official installer タブ載っています。（ここでは割愛）
また同様に、wslを起動した状態で[主な参考資料⑥～⑧](#主な参考資料)に従い、pyenvをLinuxにインストールすることができます。

<h3>（iii）どこにインストールされたか</h3>

どこにインストールされたか調べるには、例えばwslを起動した状態でLinuxにインストールした物であれば、wslを起動した状態で
```powershell
$ which インストールしたものの名前
#コピペするときは「$」以降を使用してください
```
で調べることができます。例えば、poetryを調べる場合は次のように入力します。
```powershell
$ which poetry
#コピペするときは「$」以降を使用してください
```
※以下の画像のようにwslを起動してインストールしたものはwslを起動した状態で無いとパスを教えてくれません。

![which_poetry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/a0aebb35-b94a-db87-4a36-760145d4d2a4.png)

実際に確認すると、たしかに以下のように有りました。
（※Ubuntuをインストールしている場合、Ubuntu以下に該当のフォルダがあります。）

<details><summary>poetry</summary>

![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/ef1775ba-8c26-19e4-7143-7c08d31acf0b.png)

![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/c0d3c5ed-4ddd-efcb-8d7a-42aa460fd620.png)
</details>

<details><summary>pyenv</summary>

![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/34074369-7a0c-7c0a-dd3c-42d0c5519830.png)
</details>

<h2>⑥pythonはどこにインストールされるか</h2>

自分はPythonの学習は[主な参考資料⑤](#主な参考資料)が最初の１冊目なのですが、今現在自分が本屋を行脚して他にもこれまで眺めてきた限り、Pythonの学習書はPythonのインストールについては、以下のいずれにあるインストーラを紹介していることがほとんどです。（Udemyは普段自分はあまり使っていないので正直？？です。）

（1）Python 公式 doc ( https://www.python.org/ )
（2）Anaconda 公式 doc ( https://www.anaconda.com/download )
（※AnacondaはPythonに関するプログラムやエディターが諸々セットになったようなものです。個人的にはあまりオススメしませんが、その理由はここでは割愛します）

<h3>※インストールされる場所に関する注意</h3>
<h3>（i）本等に従い、インストーラーを使ってインストールした場合</h3>

往々にして以下の**ローカルのCドライブ内の**場所にPythonのインタープリターはインストールされます。

![python396.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/fbef5d42-44cc-0ce2-f73d-691bc2f592da.png)

<h3>（ii）何らかのターミナルを開いて以下のコマンドを順に用いて、Linux内のフォルダにインストールした場合</h3>

※2つ目は3.9以前のバージョンをインストールする場合のみ必要
```powershell
wsl
```
```powershell
sudo add-apt-repository ppa:deadsnakes/ppa
```
```powershell
sudo apt update
```
```powershell
sudo apt install python3.〇
#　〇には10、11、12、13等のバージョンの数字を入れてください
```

<details><summary>Python3.13をLinux内のフォルダにWindowsPowershellに入れたときの様子</summary>

![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/69506906-a78e-321b-0072-53b1445f062c.png)

</details>

上記の3つ目までのコマンドでLinuxにPythonのインタープリターらしきものを入れた様子

![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/53060a0c-f58b-404f-231a-9d04c9c41077.png)

※Python3.11、Python3.12等も同様にして入れました。

<h2>〇とりあえず、Djangoのプロジェクトを作ってみてPoetryを導入するとどうなるか試してみた</h2>

下記のようにDjangoのプロジェクトを作ってみて、
```powershell
wsl
$ poetry init
```
でpoetryを導入して **pyproject.toml（Pythonプロジェクトの設定や依存関係を管理するためのファイル、requirements.txtとvenvを合体させたようなもの）を作る過程で切り替え（というより再指定）することができました。**

https://qiita.com/thinking-weed/private/79569252644403452d8b

なお、冒頭の結論に「ある程度」と書いたのは例えば以下の画像のように
```powershell
wsl
$ poetry env info
```
で各プロジェクト内で使われているインタープリターのバージョンを調べてみると、下の画像のように
Python3.11を指定した場合⇒3.11.0
Python3.12を指定した場合⇒3.12.0
に「3.〇.△」の△の数字が「0」になるからです。
**（〇の数字でだいたい外部モジュール使えるかどうかは切り分けられると感じていますが・・・）**

![poetry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/183942ca-47ce-402e-4bb6-48d0c0776a30.png)

※pyproject.tomlの8行目も「python = "^3.11"」になっていることに注意

<h3>また、「LocalのCドライブには、上記のPython3.9.6しか入れていなくても」プロジェクトに3.11(.0) や 3.12(.0)を指定できたことに注意</h3>

## 調査中の懸念材料

そもそも、ここまでの段階で **「sudo apt install」を乱用しているのは大丈夫なのか**心配してます。私用PCで基本自宅のご飯机での学習でしか使ってないし、強盗とかに入られてPC盗まれるようなことがない限り大丈夫だと思いますが・・・

## 主な参考資料

①[Python3 / poetry] LinuxOS上にpoetryをinstallする方法が切り替わっていた　@siruku6 さん Qiita
https://qiita.com/siruku6/items/90a34539b954de717de6

②Poetryをサクッと使い始めてみる　@ksato9700 さん Qiita
https://qiita.com/ksato9700/items/b893cf1db83605898d8a

③[初心者向け] Poetry入門!インストール方法から使い方、コマンド、パッケージの管理方法まで徹底解説 @shun198 さん Qiita
https://qiita.com/shun198/items/97483a227f288ad58112

④開発系エンジニアのためのDocker絵とき入門　鈴木　亮（著）

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/%E9%96%8B%E7%99%BA%E7%B3%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E7%B5%B5%E3%81%A8%E3%81%8D%E5%85%A5%E9%96%80-%E9%88%B4%E6%9C%A8%E4%BA%AE/dp/4798071501/ref=sr_1_2_sspa?crid=2SFG6IOUNDSL1&dib=eyJ2IjoiMSJ9.Zwjw3bHWFWkREnoJTMfDLkyyu_8yQatpaVVURbXh2zX6AdkWoBJiJOUdb5HxlGJK4hIqL_0NQ6EIWmTXd0jL2ELxQ-HlZcejd58zsR0OrYfOoaQkPfnRJvE2g7IUZI0YxEGMpmaNpJuusp5Bn3gKkApghJAIV3RfoygsXPqpIUo9P0xutM5h9J1iePIZGqGgJ_mBdhvSrUEIes7dmfyuExHx3qEUeYSkveOTE2_8IVs_vUS_wHHX9jothQXat4LiXINPb8r5m4BLHaNhpyjyMUDdcvUP7XWqYY0Ga1nhdhM.ZXX6dZR-nX3n6zEiu2cLOig0V_pTbjRSPTnOuNK3a24&dib_tag=se&keywords=docker+%E7%B5%B5%E3%81%A8%E3%81%8D+%E5%85%A5%E9%96%80&qid=1730124958&sprefix=Docker%E3%81%88%E3%81%A8%2Caps%2C224&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1
</details>

⑤確かな力が身につくPython「超」入門 第2版 (確かな力が身につく「超」入門)　鎌田正浩（著）

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FPython%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E9%8E%8C%E7%94%B0-%E6%AD%A3%E6%B5%A9/dp/4815613729/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=281676K3CHBM4&dib=eyJ2IjoiMSJ9.vsFms5ozIxbiz1EUbCK7pvmgXEFK3bKBAyJ20rX2BLHDdDr4JM7-UzWCKySAePTfmg2NBuapFlZvsluFWwKTv12JWR5bTRl1ZNrzMzWxu2-pcm502xaDcaWpVSxpy3gs5A7ejXRp3bXSirqbqpMOK5LQ0WmBCHWj442aT5dPtRa_oQKyQ-F1w8W8kurKHEMbxedTuAeAl0CYgQrfuXx1gaf5HwGwvUsMYNykTpyQIVeZiQRv-EljnqbFlcx40t1IFPIOZsoFSBaDqvpB_Uz1R2lcAKxGy_Pt8Qy6Ogyg7IQ.b64TwLiX9Ak3zH2Zrd5K2YyUMmed_bRGYv0_fo9ejLE&dib_tag=se&keywords=python+%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80&qid=1730125179&sprefix=python+%E8%B6%85+%E5%85%A5%E9%96%80%2Caps%2C248&sr=8-2
</details>

⑥pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法　
@koooooo in P&D – Planning and Development –さん Qiita
https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b

⑦pyenvの使い方　@teri_man95(teriman) さん Qiita
https://qiita.com/teri_man95/items/b15fd8f1964612331be2

⑧pyenvのbashrcで少しつまずいた　@emi-cd(白志野) さん Qiita
https://qiita.com/emi-cd/items/d7207409f20a7a6029d6

⑨Node.jsとはなにか？なぜみんな使っているのか？　@non_cal さん Qiita
https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb