Poetryを使ってPythonライブラリを自動管理してみた

# はじめに
4月になり新しいプロジェクトが始まる季節ですね。
新入社員さんも多くなるこのタイミングで、改めて開発環境をきれいにしたいと思い、今回の記事をポストします。

今回はPoetryというパッケージを利用し、Python環境の構築、特に**ライブラリ管理を丁寧にしたい**というモチベーションで導入した記録です。
対話型インターフェースで環境を構築することができ、初心者でもスムーズに導入できました。

# Poetryとは
>Poetry は、 Python で依存関係を管理およびパッケージ化するためのツールです。これを使用すると、プロジェクトが依存するライブラリを宣言でき、ライブラリが管理 (インストール/更新) されます。Poetry は、繰り返しインストールを確実にするためのロックファイルを提供し、配布用にプロジェクトを構築できます。
引用:https://python-poetry.org/docs/

すなわち、
* Pythonのパッケージを自動管理してくれるよ!
* 共同開発するときや、違う環境に移行したいときでも、簡単にインストールできるようになるよ!

というものだと認識しています。

# 1.Poetryを使ったPython環境構築方法

1.  `Ctrl + Shift + @` を押してターミナルを起動

2.  `poetry init` で初期設定
対話形式で聞かれるが、基本的には空白SkipでOK。
メイン環境に必要なライブラリ等があれば`Would you like to define your main dependencies interactively? (yes/no) [yes] `としたあとにライブラリ名を入力しておく。
開発環境に必要なライブラリはその後に同様に聞かれる。
※テスト環境はテスト用ライブラリやドキュメント生成ツールなど、開発中のコードエラー検出やドキュメント整備のために使われるものをインストールしておくとよい。基本的にはスキップしている。

    ```
    Package name [hogehoge_project]:  
    Version [0.1.0]:  
    Description []:  
    Author [None, n to skip]:  None
    License []:  
    Compatible Python versions [^3.11]:  
    Would you like to define your main dependencies interactively? (yes/no) [yes] 
    
    Package to add or search for (leave blank to skip): pandas
    Add a package (leave blank to skip): numpy
    Add a package (leave blank to skip): jupyter
    
    Add a package (leave blank to skip): 
    Would you like to define your development dependencies interactively? (yes/no) [yes] no
    ```


3. `Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass`を実行。
PowerShellの実行権限を変更することで次のコマンドがエラーにならない。

4. `poetry shell`を実行。
環境構築が完了すると.venvフォルダが作られる。


5. `poetry lock`を実行。
poetry.lockファイルが生成される。
poetry.lockとは、プロジェクトの依存関係のバージョンを固定して一貫性を保つために使われるファイル。プロジェクトが異なる環境間でも一貫した動作をするために役立つ。


6. `poetry show`を実行。
以下のようにインストール済のライブラリ一覧が表示される。
    ```powershell
    PS > poetry show
    numpy           1.26.4      Fundamental package for array computing in Python
    pandas          2.2.2       Powerful data structures for data analysis, time series, and s...
    python-dateutil 2.9.0.post0 Extensions to the standard Python datetime module
    pytz            2024.1      World timezone definitions, modern and historical
    six             1.16.0      Python 2 and 3 compatibility utilities
    tzdata          2024.1      Provider of IANA time zone data
    ```


7. 他に必要なパッケージがあるかを確認。
足りなければ`poetry add *****`で追加する。※例：`poetry add boto3`


# 2. 作成した環境を使ってVSCode上で実行する方法（Jupyter Notebookを使用）

1. VSCodeで`Ctrl+Shift+P`を押してコマンドパレットを開く


2. `python:selectinterpreter`を入力し、「インタープリターを選択」をクリック
![EnvironmentSetup_2024-04-15-09-48-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/c5f85ba0-2b28-6029-f1ab-880fb08cbdcd.png)


3. ('.venv':Poetry)となっているPython環境を選択
![EnvironmentSetup_2024-04-15-09-49-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/118c5c2b-2e23-6e97-2745-a0bb9b23a130.png)


4. `Ctrl+Shift+P`を押してコマンドパレット→`newjupyternotebook`で新しいJupyter Notebookを開く

5. プログラムを実行。実行時に再度インタープリター（カーネル）を選択させられる可能性もあるが、上記手順で再度.venv環境を選択する。
![EnvironmentSetup_2024-04-15-09-54-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/74a5cd62-762a-ea51-bced-d96587a651ed.png)

# さいごに

Pythonで開発するときに、毎回`pip install`をしていましたが、Poetryを導入してからは一気に環境を整えることができることは大きなメリットです。
Dockerコンテナを使った環境構築も経験したことがありますが、Pythonでの開発かつパッケージに特化して管理したいという小規模開発であればPoetryを使わない手はないでしょう。

ぜひみなさんもPortryを導入してみてはいかがでしょうか？