はじめに#
「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