LoginSignup
1
0

More than 1 year has passed since last update.

poetry で自動生成された pyproject.toml を使って Sphinx でドキュメント自動生成

Last updated at Posted at 2022-12-30

動機

PEP 621PEP 631 にあるように、Python を使うプロジェクトの設定は pyproject.toml に記載することが求められている。

poetry は pyproject.toml を自動生成し、インストールしたパッケージ情報を(requirements.txt を使うこと無く)pyproject.toml に記載してくれる。

また sphinx-pyproject は pyproject.toml を自動的に読み取るので、
Sphinx の conf.py から sphinx-pyproject の SphinxConfig を呼び出す事で、pyproject.toml を変更するだけでドキュメントを変更できるようになる。

このことによって、バージョン番号を上げる時など、pyproject.toml の一箇所を変更するだけで、パッケージのバージョン番号・ドキュメントのバージョン番号の両方を一度に変更でき・・・るように思ってしまう。

しかしそう上手く問屋は卸さない。

poetry は基本的な必須情報(name, version, description, authors)を pyproject.toml の [tool.poetry] セクションに設定してしまう。これがないと poetry が動かない。

これに対し sphinx-pyproject は、PEP に定義されているように、基本的な必須情報は [project] セクションに設定されているものとして読み込む。
(もちろん sphinx-pyproject に poetry の事情を汲み取る義理は無い)

この問題は poetry 側の問題であり、これを解決するよう issue も作られている。
しかしこの issue の議論を見る限り、この問題が解決される気配は無い。
(とても残念)

pyproject.toml に [project][tool.poetry] の両方を設定することが最も早い解決法だが、同じファイルであっても2箇所に同じ設定があるのは、やはりとても気持ちが悪い。

そこで sphinx-pyproject 側を修正し、無理やり [project] ではなく [tool.poetry] を読み込むようにしたい。

また sphinx-pyproject では、authors および maintainers の項目は table として設定することを前提としている。

[[project.authors]]
name = "1st Author"

[[project.authors]]
name = "2nd Author"

しかし poetry では 1st author <1st.author@domain> の形の配列で指定する。

[tool.poetry]
authors = ["1st Author <1st.author@domain>", "2nd Author <2nd.author@domain>"]

この問題についても sphinx-pyproject-poetry では poetry の形式を前提として、
authors および maintainers の項目を読み取るようにしたい。

作ったよ

使い方

使い方は sphinx-pyproject と全く同じ。

# conf.py

import os
import sys

from sphinx_pyproject_poetry import SphinxConfig

sys.path.insert(0, os.path.abspath(".."))
config = SphinxConfig("../pyproject.toml", globalns=globals())
project = config.name
release = config.version

これだけ。

Sphinx の conf.py を上記のように修正し、pyproject.toml の [tool.pyproject] に項目を書くだけで、conf.py を変更しなくても良くなる。

name, version, description, authors, maintainers の5つの項目は [tool.poetry] から読み込む。そして authors と maintainers の2つの項目は併せて author という名前で保持される。

conf.py で設定できる項目は、www.sphinx-doc.org に全部載っている。そして項目を追加する場合でも修正する場合でも、pyproject.toml に設定を追加したり変更するだけである。

便利!!(自画自賛)

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0