Подтвердить что ты не робот

Объединение документации Sphinx из нескольких подпроектов: обработка индексов, настройка синхронизации и т.д.

У нас есть многомодульный проект, задокументированный (превосходным) Sphinx. Наша настройка не похожа на одну описанную в списке рассылки. В целом, отлично работает! Но у нас есть несколько вопросов об этом:

  • Содержание подмодулей будет содержать индексные ссылки. В лучшем случае они свяжутся с неправильными индексами. (В худшем случае это, похоже, вызывает ошибку в Sphinx, но я использую версию devel, чтобы это было разумно). Есть ли способ генерации индексных ссылок только для самого верхнего toctree?

  • Существуют ли лучшие методы для синхронизации конфигурации Sphinx между несколькими проектами? Я мог представить себе что-то взломанное вокруг from common_config import *, но любопытно о других подходах.

  • Пока мы находимся в этом вопросе, вопрос, поднятый в почте списка рассылки (альтернативный symlinking subproject docs?), никогда не отвечал. Это не важно для меня, но это может быть важно для других читателей.

4b9b3361

Ответ 1

  • Я не уверен, что вы подразумеваете под этим. Ваш проект index выглядит просто отлично. Не могли бы вы пояснить это, пожалуйста?
  • Насколько я понял, from common_config import * - лучший подход для синхронизации конфигурации.
  • Я думаю, что лучший способ сделать это - это что-то вроде следующей структуры каталогов:

    main-project/
     conf.py
     documentation.rst
    
     sub-project-1/
        conf.py - imports from main-project/conf.py
        documentation.rst
    
     sub-project-2/
        conf.py - likewise, imports from main-project/conf.py
        documentation.rst
    

    Затем, чтобы просто упаковать sub-project-1 или sub-project-2, используйте эту команду UNIX:

    sphinx-build main-project/ <output directory> <paths to sub-project docs you want to add>
    

    Таким образом, будет создана не только основная проектная документация, но и добавленная подпроектная документация, которую вы хотите добавить.

    Чтобы упаковать main-project:

    sphinx-build main-project/ <output directory>
    

    Я уверен, что эта схема будет работать, но мне еще предстоит проверить ее.

Надеюсь, это поможет!

Ответ 2

Что касается пункта 2 (включая общую конфигурацию), я использую:

В Python 2:

execfile (os.path.abspath("../../common/conf.py"))

В Python 3:

exec (open('../../common/conf.py').read())

Обратите внимание, что в отличие от структуры каталогов, представленной @DangerOnTheRanger, я предпочитаю хранить отдельный каталог для общей документации, поэтому common появляется в указанном выше пути.

Мой общий файл /conf.py - это обычный файл Sphynx. Затем каждая конкретная конфигурация документации включает этот общий файл и при необходимости переопределяет значения, как в этом примере:

import sys
import os

execfile (os.path.abspath("../../common/conf.py"))

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.todo',
    'sphinx.ext.viewcode',
]

# If true, 'todo' and 'todoList' produce output, else they produce nothing.
todo_include_todos = True

# If true, links to the reST sources are added to the pages.
html_copy_source = False
html_show_sourcelink = False