web-dev-qa-db-fra.com

Y a-t-il des alternatives réelles à restructurétext pour Python documentation?

Je commence une source ouverte Python projet bientôt et j'essaie de décider à l'avance comment écrire mes doctorats. La réponse évidente utiliserait restructurétext et Sphinx avec Autodoc, car je suis == Réally Comme l'idée de documenter simplement mon code dans mes docstrings, Sphinx construit automatiquement une API DOC pour moi.

Le problème est la syntaxe restructuréeTextText qu'il utilise - je pense que c'est complètement illisible avant sa rendu. Par exemple:

[. : Type Field_storage: Filetstorage [.____]: paramètre temporaire: s'il faut ou non supprimer le fichier lorsque l'instance de fichier [.____] est la destruction [.____]: type temporaire: BOOL [.____]

Vous devez vraiment Ralentissez et prenez une minute pour donner un sens à partir de ce fouillis syntaxique. J'aime bien plus la voie de Google ( Google Python ), quelle contrepartie à ce qui précède ressemble à ceci:

 Argument: 
 Chemin (STR): Le chemin du fichier à envelopper 
 Champ_storage (filestorage): L'instance de filestage à envelopper [.____] ou ne pas supprimer le fichier lorsque le fichier 
 est détruit 

Way mieux! Mais bien sûr, Sphinx n'aura aucune de cela et rend tout le texte après "arguments:" dans une longue ligne.

Donc, pour résumer - avant d'aller et de défiler ma base de code avec cette syntaxe restructuréeTextText, j'aimerais savoir s'il existe de véritables alternatives à l'utiliser et à Sphinx, écrivant simplement mon propre API Doc. Par exemple, y a-t-il une extension pour Sphinx qui gère le style de docstring de Guide de Style Google?

54
Hubro

J'ai créé une extension SPHINX qui analyse à la fois Google Style et Numpy Soctstrings, et les convertit à la standard restructurétext.

Pour l'utiliser, installez-le simplement:

$ pip install sphinxcontrib-napoleon 

Et activez-le dans Conf.py:

# conf.py

# Add autodoc and napoleon to the extensions list
extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon']

Plus de documentation sur Napoléon ici .

69
Relentless Idiot

Je ne pense pas qu'il y ait quelque chose de mieux que sphinx pour documenter python projets pour le moment.

Pour avoir une doctrine plus claire, mon choix préféré utilise sphinx ensemble avec numpydoc . Basé sur votre exemple, cela ressemblerait à:

def foo(path, field_storage, temporary):
    """This is function foo

    Parameters
    ----------
    path : str
        The path of the file to wrap
    field_storage : :class:`FileStorage`
        The :class:`FileStorage` instance to wrap
    temporary : bool
        Whether or not to delete the file when the File instance
        is destructed

    Returns
    -------
    describe : type
        Explanation
    ...

    Examples
    --------
    These are written in doctest format, and should illustrate how to
    use the function.

    >>> a=[1,2,3]
    >>> print [x + 3 for x in a]
    [4, 5, 6]
    ...
    """

    pass

(Un exemple complet est ici ), la sortie HTML ressemblera Ceci

Je pense que la structure du fichier RST est plus claire et plus lisible. Le guide donne une plus grande information et des conventions. L'extension numpydoc fonctionne avec autodoc aussi.

31
bmu

J'utilise épydoc et pas Sphinx, cette réponse peut donc ne pas s'appliquer.

La syntaxe restructuréeText que vous décrivez pour la documentation des méthodes et des fonctions n'est pas la seule possible. De loin, je préfère décrire les paramètres à l'aide d'une liste de définitions consolidée , qui est très similaire à celle de Google Way:

:Parameters:
  path : str
     The path of the file to wrap
  field_storage: FileStorage
     The FileStorage instance to wrap
  temporary: bool
     Whether or not to delete the file when the File instance is destructed

J'essaierais si Sphix le soutient. Si ce n'est pas que vous ne pouvez pas envisager d'utiliser Epydoc juste pour cela (bien que ce ne soit pas utilisé activement en ce moment).

10

En réalité, restructurétext ainsi que le guide de style de pep8 Appliquer principalement pour coder la bibliothèque standard de Python elle-même, bien que beaucoup de programmeurs tiers se conforment également à cela.

Je suis d'accord avec vous que le style des arguments de Google est beaucoup mieux à partir d'une perspective dans le code. Mais vous devriez être capable de générer une telle doctorat avec Sphinx aussi, avec les nouvelles lignes et indentation préservées . Cela ne rend pas aussi beau que avec un formatage plus sphinxy cependant.

Quoi qu'il en soit, vous n'avez pas devez utiliser Sphinx, et à la manière, le module autodoc de Sphinx est définitivement une petite partie de celui-ci. Vous pouvez pratiquement utiliser n'importe quel générateur de documentation capable de récupérer le contenu de Doctstrings, comme - épydoc (quel soutien épytext ainsi que restructurétext, javadoc ou texte ) ou pydoctor , voire plus universel comme Doxygen .

Mais définitivement, Sphinx est assez Pythonic , très pratique à utiliser avec Python et rendre votre code compatible avec l'écosystème de Python. Je pense que vous êtes pas le seul qui pense que c'est un "manque". Peut-être qu'ils prendront en compte ces plaintes à l'avenir, ou peut-être que vous pourriez même envisager de modyfier le module autodoc par vous-même, ne devrait pas être très difficile, c'est en python, ce serait un bon exercice.

7
cedbeu

Vous CAN Écrivez doctrings dans n'importe quel format que vous aimez. Cependant, pour le bien de chaque autre Python programmeur, il est préférable d'utiliser le balisage et les outils qu'ils connaissent déjà. Leur vie est plus facile si vous vous tenez au repos et à Sphinx.

4
user25148

Python rend le contenu des docstrations disponibles en tant que __doc__ Attribut attaché à l'objet Fonction/Classe/Variable.

Donc, vous pouvez écrire trivialement d'écrire un fichier Python) qui convertit la documentation de tout format que vous aimez dans le format que vous aimez. Vous pouvez même utiliser le style Javadoc, ou XML, ou autre.

Incidemment, étant donné que Sphinx est écrit en Python, il est nécessaire de prendre une entrée non-RST est juste une question d'écriture d'une petite quantité de Python code.

3
Borealid

vous devez juste commencer une nouvelle ligne et ajouter un robinet après chaque nom de variable. Ensuite, il est rendu dans plusieurs lignes avec des noms de variables audacieuses consécutives:

Args:
    path (str):
        The path of the file to wrap
    field_storage (FileStorage):
        The FileStorage instance to wrap
    temporary (bool):
        Whether or not to delete the file when the File
        instance is destructed
0