Estou tentando usar o Sphinx para documentar um projeto de mais de 5.000 linhas em Python. Possui cerca de 7 módulos básicos. Tanto quanto eu sei, para usar o autodoc eu preciso escrever um código como este para cada arquivo no meu projeto:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
Isso é muito entediante, porque eu tenho muitos arquivos. Seria muito mais fácil se eu pudesse especificar que queria que o pacote 'mods' fosse documentado. O Sphinx poderia recursivamente percorrer o pacote e criar uma página para cada submódulo.
Existe um recurso como este? Caso contrário, eu poderia escrever um script para criar todos os arquivos .rst, mas isso levaria muito tempo.
python
python-sphinx
autodoc
Cory Walker
fonte
fonte
ls
para um arquivo e editá-lo?Respostas:
Você pode verificar este script que eu fiz. Eu acho que isso pode ajudá-lo.
Esse script analisa uma árvore de diretórios procurando módulos e pacotes python e cria arquivos ReST adequadamente para criar documentação de código com o Sphinx. Ele também cria um índice de módulos.
ATUALIZAR
Este script agora faz parte do Sphinx 1.1 como apidoc .
fonte
sphinx-build -b html . ./_build
não os captura .source directory
(. No seu caso). O diretório _build é onde os arquivos HTML serão criados. Verifique para obter mais informações: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rst
ao seuindex.rst
Não sei se o Sphinx teve
autosummary
extensão no momento em que a pergunta original foi feita, mas, por enquanto, é bem possível configurar a geração automática desse tipo sem o uso desphinx-apidoc
um script semelhante. Abaixo, há configurações que funcionam para um dos meus projetos.Ative a
autosummary
extensão (e tambémautodoc
) noconf.py
arquivo e defina suaautosummary_generate
opção comoTrue
. Isso pode ser suficiente se você não estiver usando*.rst
modelos personalizados . Caso contrário, adicione o diretório de modelos para excluir a lista ouautosummary
tentará tratá-los como arquivos de entrada (o que parece ser um bug).Use
autosummary::
na árvore do sumário em seuindex.rst
arquivo. Neste exemplo documentação para módulosproject.module1
eproject.module2
será gerada automaticamente e colocada no_autosummary
diretório.Por padrão,
autosummary
irá gerar apenas resumos muito curtos para os módulos e suas funções. Para alterar o que você pode colocar em um arquivo de modelo personalizado_templates/autosummary/module.rst
(que será analisado com o Jinja2 ):Em conclusão, não há necessidade de manter o
_autosummary
diretório sob controle de versão. Além disso, você pode dar o nome que desejar e colocá-lo em qualquer lugar da árvore de origem (no entanto_build
, não será possível colocá-lo abaixo ).fonte
Em cada pacote, o
__init__.py
arquivo pode ter.. automodule:: package.module
componentes para cada parte do pacote.Então você pode
.. automodule:: package
e principalmente faz o que você quer.fonte
__init__.py
arquivos em seus pacotes. A documentação pode incluir QUALQUER diretiva de documentação do Sphinx, inclusive.. automodule::
para módulos dentro do pacote.autodoc
é um erro de digitação, deveria serautomodule
. mas muito obrigado pela dica!Da versão 3.1 do Sphinx (junho de 2020),
sphinx.ext.autosummary
(finalmente!), A recursão.Portanto, não é necessário codificar os nomes dos módulos ou confiar em bibliotecas de terceiros como Sphinx AutoAPI ou Sphinx AutoPackageSummary para a detecção automática de pacotes.
Exemplo de pacote Python 3.7 a ser documentado ( consulte o código no Github e o resultado no ReadTheDocs ):
conf.py
:index.rst
(observe nova:recursive:
opção):Isso é suficiente para resumir automaticamente todos os módulos do pacote, mesmo que profundamente aninhados. Para cada módulo, ele resume cada atributo, função, classe e exceção nesse módulo.
Estranhamente, porém, os
sphinx.ext.autosummary
modelos padrão não geram páginas de documentação separadas para cada atributo, função, classe e exceção, e vinculam a elas nas tabelas de resumo. É possível estender os modelos para fazer isso, como mostrado abaixo, mas não consigo entender por que esse não é o comportamento padrão - certamente é isso que a maioria das pessoas deseja ..? Eu o levantei como uma solicitação de recurso .Eu tive que copiar os modelos padrão localmente e adicioná-los:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
paramytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
paramytoolbox/doc/source/_templates/custom-class-template.rst
O gancho
custom-module-template.rst
estáindex.rst
acima, usando a:template:
opção (Exclua essa linha para ver o que acontece usando os modelos de pacotes de sites padrão.)custom-module-template.rst
(linhas adicionais anotadas à direita):custom-class-template.rst
(linhas adicionais anotadas à direita):fonte
O Sphinx AutoAPI faz exatamente isso.
fonte
Talvez o que você está procurando seja o Epydoc e esta extensão do Sphinx .
fonte