🫠

Pythonのパッケージ管理ツールPoetryを使用する

2023/05/20に公開

Poetryは、Pythonのパッケージ管理ツールです。
今までパッケージ管理せずにコードを書いていたので、Poetryの使い方を学習します。

学習するメリット
・共同作業時に環境を合わせることができる
・個人開発でコードを公開するときも役立ちそう

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

環境

windows11
wsl2 ubuntu

インストール方法

windowsでのインストール方法

# poetryをインストールする
$ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
# pathを設定する
$ %APPDATA%\Python\Scripts

OSごとにインストール方法が異なるので、詳細は以下をご確認ください。
https://python-poetry.org/docs/

pip install poetryでもインストールできて実行もできました。
公式のやり方ではないので注意が必要です。

新しいプロジェクトを作成する

$ poetry new poetry-demo

Pythonのプロジェクト向きのテンプレートファイルを一式生成してくれました。

$ tree
.
├── poetry-demo
│   ├── README.md
│   ├── poetry_demo
│   │   └── __init__.py
│   ├── pyproject.toml
│   └── tests
│       └── __init__.py

ここで登場したpyproject.tomlファイルは、Pythonのプロジェクト管理ツールであるPoetryによって使用される設定ファイルです。
このファイルのおかげで、開発者は簡単にプロジェクトの依存関係を管理したり、開発やデプロイのための実行コマンドを定義したりできます。

pyproject.tomlに含まれる情報

  1. プロジェクト名、バージョン、著作権情報
  2. 使用するPythonのバージョン
  3. 依存パッケージのリスト(依存パッケージのバージョン範囲も指定可能)
  4. ビルド時のスクリプトやコマンド

既存のプロジェクトに作成する

poetry init -n

-nはpyproject.tomlファイルの内容を最小限にするオプションです。
-nを使わずに実行すると、いくつか入力を求められます。

ライブラリの追加

今度は、今回作成したプロジェクトにライブラリを追加します。

$ cd poetry-demo
$ poetry add requests
  • Installing certifi (2023.5.7)
  • Installing charset-normalizer (3.1.0)
  • Installing idna (3.4)
  • Installing urllib3 (2.0.2)
  • Installing requests (2.30.0)

Writing lock file

pyproject.tomlに「requests = "^2.30.0"」が追加されていればOKです。
自動的に適切なバージョン制約を見付け、パッケージとその依存関係を インストールしてくれます。

pyproject.toml

[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["kkj <kkj>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]

[tool.poetry.dependencies]
python = "^3.10"
+ requests = "^2.30.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

このときpoetry.lockというファイルが作成されます。

poetry.lockについて

  1. Poetryを使用して管理されているPythonプロジェクトの依存関係を追跡するために使用されます。
  2. このファイルには、プロジェクトが依存しているライブラリやフレームワークなどのパッケージの正確なバージョンが含まれています。
  3. poetry.lockファイルは手動で編集することはできず、自動的に生成および更新されます。たとえば、新しいパッケージがインストールされた場合、poetry.lockファイルが自動的に更新され、依存関係の最新のバージョンが反映されます。

node.jsのpackage-lock.jsonっぽい

試したコマンド

追加したパッケージ一覧を表示する

$ poetry show
certifi            2023.5.7 Python package for providing Mozilla's C...
charset-normalizer 3.1.0    The Real First Universal Charset Detecto...  
idna               3.4      Internationalized Domain Names in Applic...  
requests           2.30.0   Python HTTP for Humans.
urllib3            2.0.2    HTTP library with thread-safe connection...

poetry環境内で実行する

main.pyというテストファイルを作成して実行します。

$ touch main.py
# $ vi main.py とかで以下と記述
print('hello world')
$ poetry shell
pypoetry/virtualenvs/poetry-demo-PVO3PcRv-py3.10/bin/activate
(poetry-demo-py3.10) xxxx:/mnt/c/pj/test_fastapi/poetry-demo$ 
python main.py
hello world
# poetry shellから抜けるとき
exit

仮想環境の外から実行する(これしか使わない予感)

$ poetry run python main.py
hello world

参考

初期設定

Pythonの仮想環境がプロジェクトディレクトリ内に作成されるため、各プロジェクトごとに環境が分離させる。

# プロジェクトに.venvがpoetry install時に作成される
$ poetry config virtualenvs.in-project true
# 設定が確認できる
$ poetry config --list
virtualenvs.in-project = true

環境を構築する

# インストールする
$ poetry install
# ルートプロジェクトを除外する
$ poetry install --no-root
# 開発用 dev-dependenciesを除外する
$ poetry install --no-dev

参考

Discussion

ログインするとコメントできます