Sphinx-Build fehlgeschlagen - Autodoc kann Modul nicht importieren / finden


104

Ich versuche mit Sphinx zu beginnen und habe unerbittliche Probleme.

Befehl: docs/sphinx-quickstart

Ich beantworte alle Fragen und alles funktioniert gut.

Befehl: docs/ls

Alles sieht normal aus. Ergebnis:build Makefile source

Befehl: sphinx-build -d build/doctrees source build/html

Es scheint zu funktionieren. Ich konnte die Datei index.html öffnen und eine "Shell" von dem sehen, was ich will.

Wenn ich versuche, meinen eigentlichen Quellcode als sourceOrdner abzulegen, treten Probleme auf.

Befehl: sphinx-build -d build/doctrees ../ys_utils build/html

Ergebnis:

Making output directory...
Running Sphinx v1.1.3
loading pickled environment... not yet created
No builder selected, using default: html
loading intersphinx inventory from http://docs.python.org/objects.inv...
building [html]: targets for 1 source files that are out of date
updating environment: 1 added, 0 changed, 0 removed
Traceback (most recent call last):                                                                                               
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils.test_validate_ut
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils.git_utils
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named setup.setup

/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:4: WARNING: autodoc can't import/find module 'ys_utils', it reported error: "No module named ys_utils", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:10: WARNING: autodoc can't import/find module 'ys_utils.test_validate_ut', it reported error: "No module named ys_utils.test_validate_ut", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:12: WARNING: don't know which module to import for autodocumenting u'UnitTests' (try placing a "module" or "currentmodule" directive in the document, or giving an explicit module name)
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:18: WARNING: autodoc can't import/find module 'ys_utils.git_utils', it reported error: "No module named ys_utils.git_utils", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:24: WARNING: autodoc can't import/find module 'setup.setup', it reported error: "No module named setup.setup", please check your spelling and sys.path
WARNING: master file /home/ricomoss/workspace/nextgen/ys_utils/index.rst not found
looking for now-outdated files... none found
pickling environment... done
checking consistency... /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:: WARNING: document isn't included in any toctree
done
preparing documents... done
writing output... [ 50%] index                                                                                                   
Exception occurred:
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/environment.py", line 1213, in get_doctree
    f = open(doctree_filename, 'rb')
IOError: [Errno 2] No such file or directory: '/home/ricomoss/workspace/nextgen/docs/build/doctrees/index.doctree'
The full traceback has been saved in /tmp/sphinx-err-jjJ7gM.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
Either send bugs to the mailing list at <http://groups.google.com/group/sphinx-dev/>,
or report them in the tracker at <http://bitbucket.org/birkenfeld/sphinx/issues/>. Thanks!

Ich bin ein absoluter Neuling in Sphinx und relativ neu in dieser Art von Dokumentation. Kann jemand einige Vorschläge machen?

Bearbeiten:

Ich möchte in der Lage sein, ein Makefile zu verwenden, um dies zu handhaben. Ab sofort habe ich zwei Ordner in meinem Projekt.

nextgen/ls

docs ys_utils

Ich muss nextgen/docs/Makefileden HTML-Code für ys_utilsund alle anderen Module generieren, die ich haben werde.

Antworten:


86

Autodoc kann Ihre Module nicht finden, da sie nicht vorhanden sind sys.path.

Sie müssen den Pfad zu Ihren Modulen in das sys.pathin Ihr aufnehmen conf.py. Schauen Sie oben auf Ihrer conf.py(kurz nach dem Import von sys), gibt es eine sys.path.insert()Anweisung, die Sie anpassen können.

Übrigens: Sie können die Makefilevon Sphinx erstellte Dokumentation verwenden. Ruf einfach an

make

um die Optionen zu sehen.

Wenn vor dem Versuch etwas schief gelaufen ist:

make clean

vor dem Laufen make html.


58

Es hört sich so an os.path.append(), als ob es für Leute in Ordnung ist, aber wenn Sie der conf.pyVorlage folgen , fügen Sie den Modulpfad vor der sys.pathVerwendung ein os.path.insert(0, ...)und fügen einfach ein zusätzliches hinzu.

import os
import sys
sys.path.insert(0, os.path.abspath('..'))

Wenn Sie Ihr sphinxProjekt so eingerichtet haben , dass separate buildund sourceVerzeichnisse verwendet werden, sollte dieser Aufruf stattdessen lauten:

sys.path.insert(0, os.path.abspath('../..'))

32

im conf.py

Fügen Sie einfach den Pfad zu Ihrem Projektordner hinzu.

sys.path.append('/home/workspace/myproj/myproj')

8
Pfad-Hardcodierung ist nicht das Beste, was Sie mit Ihrem machen können conf.py.
Firegurafiku

18
Wenn Sie eine Projektstruktur wie haben /app, /docs... könnten Sie verwenden sys.path.append(os.path.join(os.path.dirname(__name__), '..'))und verwenden Sie dann .. automodule:: appin Ihrem .rst-Dateien.
fnkr

3

Wenn

  1. Der Modulstammpfad ist in conf.py korrekt festgelegt
  2. __init__.py ist richtig platziert
  3. Die erste Syntax ist korrekt

und Ihr Autodoc kann die Module immer noch nicht finden ...

Dies kann daran liegen, dass die Abhängigkeiten dieser Module in Ihrer Python-Umgebung nicht erfüllt sind. Sie möchten überprüfen, ob alle Importanweisungen in den Modulen funktionieren.


4
Ich verstehe nicht, warum Sphinx Abhängigkeiten benötigt. Liegt es an der Möglichkeit, Tests in Docstrings durchzuführen? Kann dies vermieden werden (ich brauche kein Paket, ich möchte nur, dass Sphinx Docstring in HTML analysiert).
cglacet

Wenn Sie diese Abhängigkeiten nicht importieren möchten, verwenden Sie autodoc_mock_imports in Ihrer conf.py-Datei: sphinx-doc.org/en/master/usage/extensions/…
filip stepniak

1

Ich glaube, ich habe dies getan, als ich zum ersten Mal versuchte, dem toctree eine Datei hinzuzufügen. Ich denke, das lag daran, dass ich die leere Zeile zwischen der Zeile: maxdepth und dem Dateinamen weggelassen habe.

.. Animatrix Concepts documentation master file, created by
   sphinx-quickstart on Thu Mar 22 18:06:15 2012.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to Animatrix Concepts documentation!
============================================

Contents:

.. toctree::
   :maxdepth: 2

   stuff


Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Oben ist meine index.rst-Datei. stuff.rst befindet sich im selben Verzeichnis wie es.


2
Wohin würde das gehen? Ich habe index.rstin /docs/sourceund /ys_utils. Ich vermute, das sollte in der docsVersion sein? Ich verwende nur die Standarddatei index.rst, mit der erstellt wurde sphinx-quickstart.
Rico

-1 Aus dem Traceback geht hervor, dass die Module nicht vorhanden sind sys.path, sodass Autodoc sie nicht findet. Die .rstDateien werden gefunden.
BMU

1

Ich habe den gleichen Fehler erhalten, der jedoch aus einem völlig anderen Grund verursacht wurde als in den anderen Antworten erläutert.

Meine .. automethod:: mymodule.funcAnweisung hätte eigentlich lauten sollen:

.. automethod:: mymodule::func`

0

Sie können die Formatierung Pweave und noweb verwenden, um erste Dokumente zu generieren, die die Ausgabe des darin eingebetteten Codes enthalten. Grundsätzlich schreiben Sie Ihre erste Datei mit Python-Code, der in markierte Abschnitte wie folgt eingebettet ist:

<<echo=False>>=
print("some text that will appear in the rst file")
@

und Pweave führt diese Chunks aus und ersetzt sie durch ihre Ausgabe in einer resultierenden ersten Datei, die Sie dann mit Sphinx verwenden können. Weitere Informationen zum Aussehen finden Sie im Pweave reST-Beispiel .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.