Получить "плоский" элемент для автомодуля sphinx

Я использую расширение autodoc Sphinx для документирования модуля, и я хотел бы получить плоский список членов модуля в выводе документации.

Я попытался использовать следующее:

.. automodule:: modname
   :members:

Однако есть две проблемы:

  • Он включает в себя модуль docstring, который мне здесь не нужен.

  • Название каждой записи имеет префикс "modname.", который является полностью избыточным (так как эта страница специально предназначена для документирования этого модуля).

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

Мой текущий план состоит в том, чтобы просто использовать autofunction (и т.д.) и явно перечислять элементы для документирования, но я все равно хотел бы знать, пропустил ли я простой способ достичь того, что я изначально хотел.

Обновление: Я хотя бы нашел обходной путь для второй части: set add_module_names=False в conf.py. Это глобальная настройка, поэтому на самом деле я не отвечаю на мой первоначальный вопрос.

Ответы

Ответ 1

Глядя на этот ответ на аналогичный вопрос, я обнаружил, что вы можете использовать autodoc-process-docstring, чтобы удалить docstrings из модулей, добавив следующий код к вашему conf.py:

def skip_modules_docstring(app, what, name, obj, options, lines):
    if what == 'module':
        del lines[:]

def setup(app):
    app.connect('autodoc-process-docstring', skip_modules_docstring)

Обратите внимание, что оператор del необходим, потому что, согласно документации, модификация на lines должна произойти на месте (вы создаете новый объект, он не работает).

Наконец, вы также можете использовать name, чтобы отфильтровать docstrings из нескольких модулей, сохранив их от других.