はじめに
8/17(木)のみんなのPython勉強会は数学特集です。みんな来てね!
nikkieです。
先日pyproject.tomlというファイルをおすすめする記事を書きました。
思ってもみなかった反響があり(継続的な流入🙌)、困惑もしているのですが、今回は続編として、pyproject.tomlを使ったprojectの設定で扱うみんなを紹介していきます!
目次
- はじめに
- 目次
- pyproject.tomlとは
- projectにこれだけは絶対設定してくれよな!
- projectに必要に応じて設定しような!
- 必要に応じて設定しよう! project関連のテーブル
- 終わりに
- 変更履歴
pyproject.tomlとは
私の主張は「setup.pyに代えて、pyproject.tomlを試してみてください」です(上記エントリ参照)。
数ヶ月前の私は「pyproject.toml、学習コストも高そうだし、使うメリットってあるのかな」と消極的でした。
Pythonコミュニティ的に推されていると認識し、重い腰を上げて使ってみたら便利だったのでおすすめしたくなった次第です。
なお、拡張子のtomlは「Tom's Obvious Minimal Language」という言語(書式)です。
(言語仕様は日本語でも読めました)
今回はprojectテーブル([project]
)に書くキーをざーっと見ていきます。
私がよく見る例のページを参照します。
https://packaging.python.org/ja/latest/specifications/declaring-project-metadata/#example
projectにこれだけは絶対設定してくれよな!
2つあります!
これらを設定しないと悪魔よりワルですね(悪すぎて色々怒られますね)
name
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#name
プロジェクトの名前。
[project] name = "unko"
(冒頭で紹介した記事の設定値を使っています1)
setup.pyでもname
でした2。
version
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#version
プロジェクトのバージョン。
[project] version = "0.1"
書式はPEP 440参照。
https://peps.python.org/pep-0440/#version-scheme
setup.pyでもversion
でした。
nameとversionの2点を設定するだけでprojectを最小限設定したpyproject.tomlとなります(これでpip install
できます)
projectに必要に応じて設定しような!
私はPyPIにアップロードするパッケージはすべて設定するようにしています。
GitHubからインストールできるようにpyproject.tomlを含めるだけの場合は、dependencies
といった最低限です
description
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#description
プロジェクトを要約する記述。
[project] description = "Unko library"
setup.pyでもdescription
でした。
readme
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#readme
プロジェクトの説明全体 (すなわち README)。
文字列で指定する場合は、「pyproject.toml からの相対パスで示した」扱いとなります。
[project] readme = "README.rst"
インラインテーブルで相対パスとcontent-typeを示すこともできます。
[project] readme = {file = "README.txt", content-type = "text/markdown"}
setup.pyではlong_description
に指定していました(long_description_content_type
も)。
requires-python
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#requires-python
プロジェクトが要求する Python のバージョン。
[project] requires-python = ">=3.8"
「Python 3.8以上」というような指定をします。
setup.pyではpython_requires
でしたね(語の並びが入れ替わってる〜!!)
license
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#license
2つの書き方があります。
1つは、インラインテーブルのfileキーでライセンスファイルの(pyproject.tomlからの)相対パスを指定する書き方。
[project] license = {file = "LICENSE"}
もう1つは、textキーでライセンスを示す文字列を値とする書き方
[project] license = {text = "MIT License"}
setup.pyでもlicense
でした。
authors/maintainers
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#authors-maintainers
authorやmaintainer1人につき、nameとemailのキーで指定できます(インラインテーブルの配列)。
キーは片方だけでもかまいません。
以下に示す例はごく一部ですので、ぜひリンク先の例をご確認ください
[project] authors = [ {name = "ftnext", email = "ftnext@example.com"}, {name = "nikkie"}, ]
setup.pyでは項目が分かれていました。
- author
- author_email
- maintainer
- maintainer_email
keywords
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#keywords
プロジェクトに関するキーワード。
[project] keywords = ["egg", "bacon"]
setup.pyでもkeywordsでした。
classifiers
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#classifiers
プロジェクトに適合する Trove 分類子。
PyPIでパッケージを見ると、左側のサイドバーの中に「分類」というゾーンがあります3。
ここを指定するのがclassifiers!
[project] classifiers = [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.10", ]
設定値は以下で確認しています。
https://pypi.org/pypi?%3Aaction=list_classifiers
(めちゃめちゃいっぱいあるよ〜〜)
setup.pyでもclassifiers
でした
dependencies/optional-dependencies
設定値の中では、ここが一番の推しポイント!
setup.pyではinstall_requires
・extras_require
だったんですよ
install_requires
➡️dependencies
extras_require
➡️optional-dependencies
わ か り や す い!!
依存するライブラリを列挙します4。
[project] dependencies = [ "httpx", ]
optional-dependenciesは、別にテーブルを作ります。
[project.optional-dependencies] dev = [ "pytest", ]
必要に応じて設定しよう! project関連のテーブル
project.urls
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#urls
- Homepage
- Documentation
- Repository
- Changelog
と指定できます。
classifiersのように、PyPIでの表示(「プロジェクトのリンク」)に反映されます。
エントリポイント
https://packaging.python.org/ja/latest/specifications/pyproject-toml/#entry-points
以下のテーブルです
[project.scripts]
- コマンドラインから呼び出せるようコマンドの設定をします
- setup.pyの
console_scripts
に対応
[project.gui-scripts]
[project.entry-points]
- 使用例
終わりに
pyproject.tomlでprojectの設定をするときに使うみんなを紹介しました。
「ちょっとだけ背伸びしてpyproject.tomlを使ってみようかな」という方が1人でもいらっしゃったらとても嬉しいです。
pyproject.tomlはprojectの設定の他に、開発で使うツールの設定を書くという使い方もできます5(これも便利🤗)。
どんどん使おう、pyproject.toml!
変更履歴
- 2024/01/14 URL変更
- ↩
- setup.pyにおける設定値は、https://setuptools.pypa.io/en/latest/userguide/declarative_config.html を参照しています↩
- https://pypi.org/project/kojo-fan-art/ より↩
- バージョンは固定しません。合わせてどうぞ ↩
- ↩