メインコンテンツへスキップ

Poetry を使って Python のプロジェクトを作成する

·2 分
Python Poetry ひとりアドベントカレンダー2024
目次

はじめに
#

「OKAZAKI Shogo のひとりアドベントカレンダー2024」の2日目です。 昨日に引き続いて、Flask で Web アプリを作っていくのを進めます。まずは、モダンなパッケージ依存関係管理ツールの Poetry の使い方を確認します。

Poetry とは
#

Poetry は Python の依存パッケージと仮想環境管理を行うためのツール。 mac の場合は、 brew 経由でインストール可能:

1brew install poetry

Poetry を使ってプロジェクトを作成する
#

以下のコマンドをプロジェクト作成前に実行し、 Poetry プロジェクト内に .venv がつくられるようにする。

1poetry config virtualenvs.in-project true --local

すでにプロジェクトのフォルダを作成している場合は以下のコマンドを実行し、 Poetry プロジェクトを開始する。

1poetry init

以下のように質問されるが大体デフォルトでOK。終わると、 pyproject.toml だけが作成される。

 1$ poetry init
 2
 3This command will guide you through creating your pyproject.toml config.
 4
 5Package name [flask-sample]:
 6Version [0.1.0]:
 7Description []:
 8Author [None, n to skip]: OKAZAKI Shogo
 9License []:
10Compatible Python versions [^3.13]: 
11
12Would you like to define your main dependencies interactively? (yes/no) [yes]
13You can specify a package in the following forms:
14  - A single name (requests): this will search for matches on PyPI
15  - A name and a constraint (requests@^2.23.0)
16  - A git url (git+https://github.com/python-poetry/poetry.git)
17  - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop)
18  - A file path (../my-package/my-package.whl)
19  - A directory (../my-package/)
20  - A url (https://example.com/packages/my-package-0.1.0.tar.gz)
21
22Package to add or search for (leave blank to skip):
23
24Would you like to define your development dependencies interactively? (yes/no) [yes]
25Package to add or search for (leave blank to skip):
26
27Generated file
28
29[tool.poetry]
30name = "sample-project"
31version = "0.1.0"
32description = ""
33authors = ["OKAZAKI Shogo"]
34readme = "README.md"
35
36[tool.poetry.dependencies]
37python = "^3.13"
38
39
40[build-system]
41requires = ["poetry-core"]
42build-backend = "poetry.core.masonry.api"
43
44
45Do you confirm generation? (yes/no) [yes]

フォルダごと作成したい場合は以下のコマンド。

1poetry new <project-name>

poetry new を実行すると、以下のようなフォルダ構造が作られる。

 1$ poetry new sample-project
 2$ cd sample-project/
 3$ tree
 4.
 5├── README.rst
 6├── pyproject.toml
 7├── sample_project
 8│   └── __init__.py
 9└── tests
10    ├── __init__.py
11    └── test_sample_project.py

pyproject.toml は Python 標準の設定ファイル(PEP518) 中身はこんな感じ:

 1[tool.poetry]
 2name = "sample-project"
 3version = "0.1.0"
 4description = ""
 5authors = ["OKAZAKI Shogo"]
 6readme = "README.md"
 7
 8[tool.poetry.dependencies]
 9python = "^3.13"
10
11
12[build-system]
13requires = ["poetry-core"]
14build-backend = "poetry.core.masonry.api"
  • [tool.poetry]: プロジェクトの基本的なメタデータの設定
  • [tool.poetry.dependencies]: プロジェクトの依存パッケージのリスト
  • [build-system]: Poetry をプロジェクト管理に使うビルドシステムとして指定

Poetry にライブラリを追加
#

poetry add コマンドで必要なライブラリを追加できる1

1poetry add flask

Poetry 環境を構築
#

以下のコマンドで、実際に環境を構築する。

  • プロジェクトルート直下に poetry.lock が作成される2
    • すでに存在する場合は、poetry.lock に書かれたバージョンを利用してパッケージがインストールされる
  • virtualenvs.in-project true が設定できている場合はプロジェクトルート直下に .venv フォルダが作成される
    • .venv フォルダが作られていない場合は既に virtualenv が作られている場合があるので、poetry env remove <env-name> で一度削除して再度環境を作り直す
1poetry install

Poetry 環境での実行
#

以下のコマンドで Poetry 環境でコマンドを実行できる3

1poetry run <コマンド>

Poetry 環境に入る
#

以下のコマンドで poetry 環境に入ることができる4

1poetry shell

参考資料
#


  1. pipenv だったら pipenv install コマンドに相当 ↩︎

  2. ロックファイル自体は poetry lock コマンドでも作成可能 ↩︎

  3. pipenv だったら pipenv run コマンドに相当 ↩︎

  4. pipenv だったら pipenv shell コマンドに相当 ↩︎