Заголовки разделов Sphinx apidoc для имен модулей / пакетов Python

Когда я запускаю sphinx-apidoc, а затем make html, он создает страницы документов, которые имеют разделы «Подпакеты» и «Подмодули», а также «модуль» и «пакет» в конце каждого имени модуля / пакета в таблице содержания (TOC). Как я могу предотвратить запись этих дополнительных заголовков без редактирования исходного кода Sphinx?

вот пример страниц документации, которые я хотел бы сделать (обратите внимание на оглавление):

http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation

Я так понимаю, это связано с файлом apidoc.py в источнике sphinx (строка 88):

https://bitbucket.org/birkenfeld/sphinx/src/ef3092d458cc00c4b74dd342ea05ba1059a5da70/sphinx/apidoc.py?at=default

Я мог бы вручную отредактировать каждый отдельный файл .rst, чтобы удалить эти заголовки или просто удалить эти строки кода из сценария, но тогда мне пришлось бы скомпилировать исходный код Sphinx. Есть ли автоматический способ сделать это без ручного редактирования исходного кода Sphinx?


person ecoe    schedule 08.01.2014    source источник
comment
Аналогичный вопрос: stackoverflow.com/q/29385564/407651.   -  person mzjn    schedule 11.11.2015


Ответы (5)


Я сам боролся с этим, когда нашел этот вопрос ... Приведенные ответы не совсем соответствовали тому, что я хотел, поэтому я поклялся вернуться, когда я это выясню. :)


Чтобы удалить «пакет» и «модуль» из автоматически сгенерированных заголовков и иметь документы, которые являются действительно автоматическими, вам необходимо внести изменения в нескольких местах, так что несите меня.

Во-первых, вам нужно обработать ваши sphinx-apidoc параметры. Я использую:

sphinx-apidoc -fMeET ../yourpackage -o api

Предполагая, что вы запускаете это из каталога docs, это будет источником yourpackage документации и поместить полученные файлы в docs/api. Параметры, которые я здесь использую, будут перезаписывать существующие файлы, помещать документы модуля перед документами подмодулей, помещать документацию для каждого модуля на его собственную страницу, воздерживаться от создания заголовков модулей / пакетов, если они уже есть в ваших строках документации, и не будет создавать файл оглавления.

Это много вариантов, которые нужно запомнить, поэтому я просто добавляю это в конец моего Makefile:

buildapi:
    sphinx-apidoc -fMeET ../yourpackage -o api
    @echo "Auto-generation of API documentation finished. " \
          "The generated files are in 'api/'"

После этого вы можете просто запустить make buildapi для создания своих документов.

Затем создайте api.rst файл в корне ваших документов со следующим содержимым:

API Documentation
=================

Information on specific functions, classes, and methods.

.. toctree::
   :glob:

   api/*

Это создаст оглавление со всем, что находится в папке api.

К сожалению, sphinx-apidoc по-прежнему будет генерировать yourpackage.rst файл с уродливым заголовком «yourpackage package», поэтому нам нужна последняя часть конфигурации. В вашем conf.py файле найдите параметр exclude_patterns и добавьте этот файл в список. Это должно выглядеть примерно так:

exclude_patterns = ['_build', 'api/yourpackage.rst']

Теперь ваша документация должна выглядеть точно так, как вы ее разработали в строках документации модуля, и вам никогда не придется беспокоиться о том, что ваши документы Sphinx и документация в коде не будут синхронизированы!

person Jen Garcia    schedule 07.02.2016
comment
для меня это ничего не привело к тому, что хотел OP. вы только что изменили оглавление, но внутренние документы такие же, потому что сгенерированный .rst имеет эти заголовки по умолчанию. - person villasv; 08.06.2016
comment
Я приказываю sphinx-apidoc не создавать заголовки по умолчанию с параметром -E. Если эта опция включена, если ваш модуль имеет правильный заголовок строки документации, Sphinx будет использовать его вместо генерации. - person Jen Garcia; 08.06.2016
comment
В самом деле, я не заметил разницы, потому что в пакетах не было строк документации, поэтому заголовки остались, но даже модули без строк документации не имели заголовков в файлах .rst. - person villasv; 09.06.2016
comment
Вы придумали способ удалить субпакет и субмодуль? Затем вместо этого используйте имя og subpackages и submodules. - person mr.bjerre; 04.01.2017
comment
@JenGarcia ... если у вашего модуля правильный заголовок строки документации. Как вы это установите? Ничего не нашел об этом нигде. - person mr.bjerre; 04.01.2017
comment
Как только вы перейдете к более сложным структурам, исправление включает замену текста, как @Jakob предложил в своем ответе. - person Jen Garcia; 05.01.2017


ответ Джен Гарсиа очень помог, но для этого необходимо поместить повторяющиеся имена пакетов в строки документации. Я использовал однострочник Perl, чтобы удалить суффикс «модуль» или «пакет» в моем Makefile:

docs:
    rm -rf docs/api docs/_build
    sphinx-apidoc -MeT -o docs/api wdmapper
    for f in docs/api/*.rst; do\
        perl -pi -e 's/(module|package)$$// if $$. == 1' $$f ;\
    done
    $(MAKE) -C docs html
person Jakob    schedule 21.12.2016
comment
У вас есть похожий фикс для make.bat? - person mr.bjerre; 04.01.2017
comment
@ mr.bjerre извините, я не разрабатываю под Windows. Код Perl можно заменить небольшим скриптом на Python, который делает то же самое, но я доволен текущим решением под Unix. - person Jakob; 05.01.2017
comment
Я получаю синтаксическую ошибку при использовании сценария perl: syntax error at -e line 1, near ". ==" Execution of -e aborted due to compilation errors. - person Eddy; 27.07.2017
comment
@Eddy, какую ОС и версию Perl вы используете? Похоже, вы пропустили $ (?) - person Jakob; 28.07.2017

Я не уверен, что отвечу на ваш вопрос на 100%, но у меня был аналогичный опыт, и я понял, что каждый раз запускаю sphinx-apidoc с флагом -f, что каждый раз создает новые файлы .rst.

Теперь я разрешаю sphinx-apidoc генерировать файлы .rst один раз, но не перезаписывать их, поэтому я могу изменить их, чтобы изменить заголовки и т. Д. а затем запустите make html, чтобы распространить изменения. Если я хочу заново сгенерировать .rst файлы, я могу просто удалить файлы, которые хочу регенерировать, или передать флаг -f.

Таким образом, вам нужно изменить первые файлы, но только один раз.

person A.Wan    schedule 10.11.2015

Я не хотел использовать заголовки в своих строках документации, поскольку следовал рекомендациям по стилю numpy. Итак, я сначала создаю первые файлы, а затем запускаю следующий скрипт python в качестве этапа постобработки.

from pathlib import Path


src_dir = Path("source/api")
for file in src_dir.iterdir():
    print("Processed RST file:", file)
    with open(file, "r") as f:
        lines = f.read()

    junk_strs = ["Submodules\n----------", "Subpackages\n-----------"]

    for junk in junk_strs:
        lines = lines.replace(junk, "")

    lines = lines.replace(" module\n=", "\n")

    with open(file, "w") as f:
        f.write(lines)

Этот сценарий хранится в том же каталоге, что и make-файл. Я также добавляю в make-файл следующие строки.

html:
    # rm -r "$(BUILDDIR)"
    python rst_process.py
    @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

Теперь при запуске make html документация строится так, как я хочу.

person TrigonaMinima    schedule 15.05.2021