はじめに
暑すぎましゅ、nikkieです。
ミリシタではエミリーちゃんがイチオシのnikkieですが(私服SHSエミリーが可愛い!)、
Pythonでは最近pyproject.tomlが熱いです。
私がこのファイルの便利さに気づいたのはごくごく最近なのですが、setup.pyを使っている方(=過去の自分)向けに、「こんな便利なファイルがあるんだよ!」とオススメしていきます。
目次
- はじめに
- 目次
- pyproject.tomlをオススメしたい背景
- からあげさんの「Pythonで自分だけのクソライブラリを作る方法」をpyproject.tomlで実装する
- すごいんだよ、pyproject.toml!
- 終わりに
pyproject.tomlをオススメしたい背景
世はまさに大LLM時代。
ChatGPTのAPIを使ってPythonでライブラリを自作する例を頻繁に目にします。
- Pythonで作ったCLIツールをGitHubから直接pipでinstallできるようにする方法 - $shibayu36->blog; 👏👏
- GitHubのEventAPIとChatGPTを使って「この人最近何しているの?」が分かるコマンドを作った - notebook 👏👏
これらはどれも課題を解決していて、さらに、それを他の人も利用できて、素晴らしいと思います!
一方、非常に細かい点ですが、私には気になることがありました。
それがsetup.pyの利用です。
自作ライブラリをGitHubからインストールできるようにするためにsetup.pyが書かれています。
Pythonのパッケージングに関するライブラリsetuptoolsのドキュメントには以下の文があります1
New projects are advised to avoid setup.py configurations (beyond the minimal stub) when custom scripting during the build is not necessary.
意訳 ビルドの間に実行されるカスタムスクリプトが必要でないとき、新しいプロジェクトには(最小のスタブを越えた)setup.pyを使った設定を避けることを強く勧めます
nikkieの認識(2023年時点)
- 正直最初は「pyproject.toml、何が便利なの?」と思っていた(すまんかった...)
- PoetryとかPipenvとかと一緒に使う? 学習コスト高そう...
- 上記の一文がきっかけで「もしかしてPythonコミュニティ的にはsetup.pyからpyproject.tomlへ乗り換えが進んでいる!?」
- 「界隈の標準から取り残されているかも」という危惧を抱く
- 実際使ってみる2と、「これはいいものかもしれない」と思い始めた
- dependencies, optional-dependenciesなど、いくつかの設定項目はsetup.pyよりはるかに分かりやすい
- setup.pyを使っている方々、ぜひぜひpyproject.tomlを使ってみてくだされ〜という気持ち
setuptoolsのドキュメントにはsetup.pyとpyproject.tomlの設定例が併記されており3、非常に参考になりますよ。
からあげさんの「Pythonで自分だけのクソライブラリを作る方法」をpyproject.tomlで実装する
ばーん!
pip install git+https://github.com/ftnext/unko
>>> import unko
>>> unko.deru()
puripuri
pyproject.toml一歩目
差分はpyproject.tomlだけ、そしてその内容は以下だけです。
[project] name = "unko" version = "0.1"
projectテーブルにnameとversionだけ定義すれば、setup.pyと同じ役割を果たす、最小限のpyproject.tomlとなります。
この2つの設定は、setup.pyのname引数とversion引数に相当します。
# ref: https://github.com/karaage0703/unko/blob/248a7246c383df32119b1cb70976c3a641595553/setup.py from setuptools import setup, find_packages setup( name='unko', version='0.1', packages=find_packages() )
setup.pyにあったpackages
引数相当のものはどこにいったのだろうと思われるかもしれませんね。
これ、(このクソライブラリほど単純な構成なら)いらないみたいなんですよね
https://setuptools.pypa.io/en/latest/userguide/quickstart.html#package-discovery
Starting with version 61.0.0, setuptools’ automatic discovery capabilities have been improved to detect popular project layouts (such as the flat-layout and src-layout) without requiring any special configuration.
よく用いられるプロジェクトのレイアウトは(setuptoolsが)検出してくれるようなのです。
このあたりは以下などを読んで理解を深めていきたい!
すごいんだよ、pyproject.toml!
設定例
projectテーブルにどんな設定項目があるかは日本語で読める以下がオススメ!(翻訳に感謝)
私は、このドキュメントの「例」を参考にしています。
(他には知られたライブラリのリポジトリの設定値をパクるとかですね)
プロジェクトの設定だけでなく、開発に使うツールの設定も書ける!
これが本当にすごいと感じています。
開発で使うblack、pytest、mypyなどなど、これらのツールはpyproject.tomlで(も)configureできるのです!
最近の私はtaskipyを使っています([tool.taskipy.tasks]
)。
taskipyでコマンドをまとめられるし、各ツールの設定も記載できるし、「痒いところに手が届く1ファイルだな〜」と感じています
終わりに
setup.pyを使っていた過去の自分向けに、pyproject.tomlのススメを綴りました。
- Pythonで自作ライブラリを作るときにsetup.pyという例を見かける
- 旦那、ここだけの話、実はpyproject.tomlという便利なファイルがあるんですよ!
- 学習コストが高いと感じるかもしれませんね。ただsetup.pyより設定項目名が分かりやすいという点は大きいと思います🤗
- projectを設定しないで、開発で使うツールの設定を書くだけで導入することもできます!4(とにかく仲良くなろう!)
自作ライブラリを作るときに「ちょっとだけ背伸びしてpyproject.tomlを使ってみよっかな」という方がいらっしゃったらとても嬉しいです。
どんどん使おう、pyproject.toml!
pyproject.tomlのPEPもいくつかあるようで、読んでいって分かったことがあったら、別記事にアウトプットしていきます〜
- https://setuptools.pypa.io/en/latest/userguide/quickstart.html#setup-py↩
-
「祝
pyproject.toml
デビュー 」 ↩ - setup.pyの設定を逃がせるsetup.cfgの例も併記されています(3通り見られる!)↩
- ↩