2012-09-12 13 views
6

Ich habe eine ziemlich große Codebasis geerbt, für die ich eine HTML-Dokumentation erstellen möchte. Da es in Python geschrieben ist, habe ich mich für sphinx entschieden, da die Benutzer des Codes an das Design und die Funktionalität der mit sphinx erstellten Python-Dokumentation gewöhnt sind. Ich habe den Befehl sphinx-apidoc verwendet, um automatisch die ersten Dateien zu erstellen. Ich habe den Modulpfad in sys.path importiert, damit sphinx den Code finden kann.Führt Sphinx meinen Code beim Ausführen von 'make html' aus?

So weit so gut. Wenn ich jedoch versuche, den HTML-Code mit dem Befehl make html zu erstellen, tauchen viele Tracebacks auf und einige der Beispiele in der Codebase scheinen ausgeführt zu werden. Was kann der Grund dafür sein und wie kann ich das verhindern?

+1

Beispiele in der Code-Basis, wie, Code nach einem '__main__'? Oder doctests (Sie wissen, Tests in einem Docstring)? –

+0

Gute Frage. Ich zögere, es noch einmal zu machen. Der genaue Befehl für sphinx-apidoc war: sphinx-apidoc -f -F -o. ../ src' folgt mit 'make html'. Würde das die Ausführung von Doctests initiieren? Wenn ja, wie kann ich das verhindern? – AME

+1

(1) überprüfen Sie, ob Sie etwas Code in der '__main__' haben; (2) Wenn Sie nicht die Erweiterung ['doctest'] (http://sphinx.pocoo.org/ext/doctest.html) verwenden, sollten Sie beginnen. Überprüfen Sie Ihre Konfigurationsdatei, um sicherzustellen, dass. –

Antwort

8

Bei Verwendung von autodoc importiert Sphinx die dokumentierten Module, sodass der gesamte Code auf Modulebene ausgeführt wird. Dies passiert jedes Mal, wenn Sie "html" machen. In diesem Sinne "läuft" Sphinx deinen Code.

Möglicherweise müssen Sie Ihren Code etwas anders organisieren, damit die Fehler verschwinden (Code auf Modulebene in Funktionen verschieben). Ein Beispiel dafür, was passieren kann, finden Sie unter this question.

Das ist meine Vermutung, aber es ist vielleicht nicht die ganze Geschichte. Es ist schwer, ohne zusätzliche Informationen mehr zu sagen.

0
def main(): 

    print('hello world') 

if __name__ == '__main__': 

    main() 

Auf diese Weise wird Ihr Code nicht ausgeführt.

+0

Ein wenig mehr Erklärung würde wahrscheinlich dem OP und anderen helfen –

Verwandte Themen