Автоматическая итоговая ссылка Sphinx на импортированную документацию участника

#python #package #python-sphinx #toctree

#python #пакет #python-sphinx #toctree

Вопрос:

Я пытаюсь задокументировать несколько сложный пакет Python, в нем есть несколько частных подмодулей

т.е.

 package
  -- __init__.py "Package Initialization"
  -- _info.py "Package Info"
  -- _core.py "Packages Core members"
  -- _extra1.py "Package Extra members group 1"
  

затем в __init__.py у меня есть:

 from package._info import __authors__, __copyright__, __license__, 
                          __contact__, __version__, __title__, __desc__

from package._core import funcA, funcB, classA, classB

try:
    from package._extra1 import funcE1A, funcE1B, funcE1C
except ImportError:
    _extra1_requirement = "Requires external_package>=x.y"

    def funcE1A(*args, **kwargs):
        raise NotImplementedError(_extra1_requirement)

    def funcE1B(*args, **kwargs):
        raise NotImplementedError(_extra1_requirement)

    def funcE1C(*args, **kwargs):
        raise NotImplementedError(_extra1_requirement)
  

чтобы все общедоступные элементы были доступны в package пространстве имен
однако, когда я использую autosummary в sphinx для документирования моего пакета, т.Е.

 .. automodule:: package

Core Functions
--------------
.. autosummary::
    :toctree: reference/

    funcA
    funcB

Core Classes
------------
.. autosummary::
    :toctree: reference/

    classA
    classB

Extra 1 Functions
-----------------
.. autosummary::
    :toctree: reference/

    funcE1A
    funcE1B
    funcE1C
  

он генерирует файлы autodoc для reference/package.member вместе со сводной таблицей, однако ему не удается создать ссылки из сводной таблицы на главную страницу документации для каждого участника, если я изменяю свою документацию на

 .. automodule:: package

Core Functions
--------------
.. currentmodule:: package._core
.. autosummary::
    :toctree: reference/

    funcA
    funcB

Core Classes
------------
.. currentmodule:: package._core
.. autosummary::
    :toctree: reference/

    classA
    classB

Extra 1 Functions
-----------------
.. currentmodule:: package._extra1
.. autosummary::
    :toctree: reference/

    funcE1A
    funcE1B
    funcE1C
  

Он генерирует ссылки на страницы документации, однако эти страницы теперь называются как reference/package.private_submodule.member , а не reference/package.member

Я хочу сохранить основные страницы документации как reference/package.member и заставить autosummary генерировать ссылки на эти страницы. Однако я не смог найти ничего, что могло бы помочь, несмотря на многократный поиск и просмотр документацииhttps://www.sphinx-doc.org/en/master/usage/extensions/autosummary.html

Ответ №1:

Я обнаружил проблему

Я прошел через переименование автоматически созданных файлов, когда я извлекал частный подмодуль, autosummary сгенерировал эти файлы со строкой:

 .. currentmodule:: package.submodule
  

эта строка является источником ошибки, поскольку рефакторинг потребовал ее изменения на :

 .. currentmodule:: package
  

Обнаружив это, я переименовал несколько файлов и повторно запустил сборку, новые файлы, сгенерированные autosummary, были связаны правильно.