プロジェクトのパッケージ化
自分のプロジェクトをパッケージ(厳密にはライブラリ)として扱わない場合、プロジェクト内のモジュール間でのimportが通常のようにできなく、マニュアルでsys.pathをいじる必要があります。これはものすごく不便です。ので、poetry・pipを使ったプロジェクトのパッケージ化方法をまとめます。
基本方針
基本手順はpoetry・pipに変わらず同じ。(PEP 621のおかげっぽい)
- パッケージ化する際に、プロジェクトの設定(どのフォルダーをパッケージとしたいのか、パッケージ化際どのツールを使うかなど)を記述する必要がある。これにはpyproject.tomlファイルを使う
- パッケージ化するコマンドを使う
想定ディレクトリ構造
.
└── project/
├── src/
│ └── package_name/
│ └── # python files
└── pyproject.toml
pip + setuptools
pyproject.toml
[project]
name = "package_name"
version = "0.1.0"
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
command
上を記述した後に以下のコマンドを打つことで、自動的にパッケージ化してくれます。
pip install -e .
注意
-
e
はeditableの略です。editableでないと、プロジェクト内のコードを変更をした際に毎回buildしないといけなくなります。ので、デベロップ段階ではeditableでインストールします
参考
poetry
pyproject.toml
[tool.poetry]
name = "package_name"
version = "0.1.0"
description = ""
authors = ["yourname <your_name@gmail.com>"]
packages = [{ include = "package_name", from = "src"}]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
注意
- name、version、description、authorsは必須です (ないとエラーが出ます)
- poetryはデフォルトでpyproject.tomlと同じdirectory内のtool.poetry.nameがprojectのソースダイレクトり (=パッケージ化の対象)であることを想定している。そのため、src内にプロジェクトがある場合、tool.poetry.packagesにマニュアルでプロジェクトフォルダーを指定する必要があります
command
上を記述した後に以下のコマンドを打つことで、自動的にパッケージ化してくれます。
poetry install
参考