🚀
pyproject.tomlでPoetryを使わず自作パッケージを作成する
前提
- setup.pyではなくpyproject.tomlを使用する
- poetryは使わない
パッケージの元となるフォルダを準備
以下のようにパッケージの元となるフォルダを準備する。
project_root_directory
└── src
└── mypkg
├── __init__.py
├── main.py
├── mod.py
└── subdir
└── submod.py
main.py
from mypkg.mod import modfunc
from mypkg.subdir.submod import submodfunc
def main():
modfunc()
submodfunc()
if __name__ == "__main__":
main()
__init__.py
はなくてもよいが、あるとパッケージであることが明示的にわかりやすくなる。
pyproject.tomlを作成
pyproject.tomlにビルドに必要な情報やパッケージの基本情報を記載する。
build-backendには様々なツールが利用できるが、今回はsetuptoolsを使用。
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "mypkg"
version = "1.0.0"
description = "A package for test"
nameで指定した名前は、installの時やpip showで一覧を表示した際に使用される。
作成したpyproject.tomlはプロジェクトルートフォルダに配置する。
project_root_directory
├── pyproject.toml
└── src
└── mypkg
├── __init__.py
├── main.py
├── mod.py
└── subdir
└── submod.py
MANIFEST.inを作成
スクリプト以外に追加しておきたいデータがある場合は、MANIFEST.in
に記載する。
include data/some_data.txt
参考: Controlling files in the distribution (setuptools 公式ドキュメント)
buildパッケージをインストール
PyPAが作成したbuildパッケージをインストールする。
pip install build
conda install build
コマンド実行
python -m build # ソースディストリビューションとバイナリディトリビューション両方を作成
python -m build --sdist # ソースディストリビューションのみ作成
install
以下のコマンドでインストールが可能。condaはおそらく未対応。
pip install ~~~.tar.gz
pip install ~~~.whl
installが完了するとlib/site-packagesの中にメターデータを管理するフォルダや、mypkgというソースコードが入ったフォルダ(ソースディストリビューションからのインストール時のみ?)が作成される。MANIFEST.in
でその他のデータを含めた場合には、そのデータもmypkgの中に格納される。
import
コード内で以下のようにインポートが可能となる。
import mypkg
zipで作成したい場合
pyproject.tomlをパッケージ内の同じ階層に入れておき、zip化するとzipのパッケージが完成
参考文献
Discussion