2009-10-01 12 views
1

Cette question est encore plus difficile aujourd'hui car je n'ai pas eu de chance en utilisant la fonction de recherche sur la page d'accueil Sphinx aujourd'hui.Comment utiliser Sphinx auto-documentation lorsque le fichier Python ne sera pas compilé

J'ai un groupe de modules que je veux documenter à partir des docstrings. Cependant, ce ne sont pas de purs scripts Python. Ils ne seront pas compilés tels quels, car ils sont exécutés à partir d'une application C# qui crée une nouvelle variable dans la portée d'exécution.

Pour le compilateur Python, il semble que j'ai une méthode non définie (ce qui, techniquement, jusqu'à ce que C# crée le moteur de script IronPython et crée la méthode).

Quand je lance:

sphinx-build -b html output/html 

je reçois:

NameError: name 'injected_method' is not defined 

Comment puis-je obtenir Sphinx d'ignorer les erreurs de compilation et juste générer ma documentation?

EDIT:

Si quelqu'un sait si une alternative à la Sphinx (comme Epydoc) n'a pas à compiler le script Python pour obtenir les signatures de fonction et docstrings, qui seraient utiles aussi bien. Sphinx est le générateur de documentation le plus beau, mais je l'abandonnerai si je le dois.

Répondre

0

D'accord, j'ai trouvé un moyen de contourner les erreurs.

Lors de la mise en place de l'environnement de script intégré, au lieu d'utiliser:

ScriptScope.SetVariable("injected_method", myMethod); 

J'utilise maintenant:

ScriptRuntime.Globals.SetVariable("injected_method", myMethod); 

Et puis, dans le script:

import injected_method 

Ensuite, J'ai créé un fichier factice injected_method.py dans mon chemin de recherche, qui est vide. Je supprime le fichier fictif lors de la construction de mon projet C# pour éviter tout conflit.

0

Peut-être pourriez-vous définir injected_method comme une fonction vide pour que la documentation fonctionne. Vous devez vous assurer que la définition de injected_method que vous injectez se produit après le nouveau stub injectected_method.

#By empty function I mean a function that looks like this 
def injected_method(): 
    pass 
+0

Je suppose que cela fonctionnerait, mais je ne sais pas comment l'obtenir après l'injection de la méthode. Je dois créer le ScriptScope (où j'injecter mes méthodes personnalisées) avant d'exécuter le script dans ce ScriptScope. Aussi, je préfère ne pas avoir de méthodes factices dans ma source. Il pourrait arriver à quelque chose comme ça si je ne peux pas contourner les erreurs du compilateur, bien que ... – cgyDeveloper

3

Eh bien, vous pouvez essayer:

  • Emballage l'utilisation de injected_method dans un try/except.
  • Ecriture d'un script qui filtre tout le code python exécuté lors de l'importation et envoie le résultat dans Sphinx.
  • Vous pourriez .... ok, je n'ai plus d'idées. :)
+0

Je ne pouvais pas l'obtenir pour se cacher derrière un essai/sauf. Je suppose que je pourrais filtrer tout le code injecté avant d'exécuter Sphinx, ça marcherait. – cgyDeveloper