Sie sehen ein wenig verwirrt hier. Sphinx ist nicht wirklich ein syntaktischer Analysator. Ihr Python-Code muss ausführbar sein, damit Sphinx die Docstrings abfangen kann. Aus diesem Grund hilft das Umbenennen der Erweiterungsdateien in ".py" nicht.
Nun, ich habe vor kurzem mit Sphinx und Cython gearbeitet und würde gerne meine Erfahrung teilen ... Hier ist das vollständige detaillierte Verfahren, um die automatisierte Generierung einer HTML-Dokumentation für eine bestimmte kompilierte Cython-Erweiterung von Docstrings zu erhalten:
[Anmerkung: ich verwendete Sphinx 1.1.3 und 0.17.4 Cython]
Vor allem die „Docstrings“ Python verwenden (mit allen Einschränkungen kann es haben - durch Beispiel können Sie nicht beschreiben ein Konstruktor.Siehe docstrings Spezifikationen) in Ihrem Cython Code:
cdef class PyLabNode:
"""
This is a LabNode !!!
"""
cdef LabNode* thisptr
cdef PyLabNetwork network
def __cinit__(self):
self.thisptr = new LabNode()
def __dealloc__(self):
if self.thisptr:
del self.thisptr
def SetNetwork(self, PyLabNetwork net):
"""
Set the network !!!
"""
self.network = net
und neu kompilieren "yourextension.so".
Dann starten Sie "sphinx-quickstart" und beantworten Sie die Fragen. Vergessen Sie nicht, Ja zu sagen, wenn Sie nach "Autodoc" gefragt werden. Dadurch werden das "Makefile", die "index.rst" -Datei und die "conf.py" -Dateien erzeugt.
Dieser letzte „conf.py“ hat bearbeitet werden Sphinx zu sagen, waren Ihr Modul zu finden:
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('../../parent/dir/of/yourextension/'))
Die „index.rst“ Datei muss auch bearbeitet werden, welches Modul zu sagen, könnte sein, analysiert:
Contents:
.. toctree::
:maxdepth: 2
.. automodule:: yourextension
:members:
:undoc-members:
:show-inheritance:
schließlich die Dokumentation bauen, indem Sie:
$ make html
das war genug für mich (Ich habe die resultierende Menge von HTML-Dateien in einem Verzeichnis ".../_ build/html /"). Mag sein, dass Sphinx und Cython sich weiterentwickelt haben, seit die vorhergehende Frage gestellt wurde, aber ich hatte keine "Signatur" Probleme zu bewältigen. Keine bestimmte Cython-Anweisung zu verwenden, noch irgendeine zu Sphinx zu ...
Hoffe, das hilft.
EDIT: Nun, ich möchte meine Worte zurücknehmen. Ich stieß auf das Problem, das "Dan" bezüglich der "embedsignature" -Atmosphäre bei der Verwendung von Epydoc erwähnte (also nehme ich an, dass dies auch bei Sphinx ein Problem ist). Die Aktivierung dieser Compiler-Direktive konforme Signaturen nicht Python sowieso nicht senden:
PyLabNode.SetNetwork(self, PyLabNetwork net)
Dies hat 2 Nachteil: Die Punktnotation für die Klasse Präfix und dem eingegebenen Parameter.
Am Ende ist die einzige Art, wie ich herausfinden konnte Richtigen senden war wie so eine nachgiebige Unterschrift auf der ersten Zeile der doc-Strings zu schreiben:
def SetNetwork(self, PyLabNetwork net):
"""
SetNetwork(self, net)
Set the net !!!
@param self: Handler to this.
@type self: L{PyLabNode}
@param net: The network this node belongs to.
@type net: L{PyLabNetwork}
"""
self.network = net
Hope this sowohl Sphinx helfen und Epydoc Benutzer ...
EDIT: bezüglich der __cinit__
, konnte ich das Dokument erfolgreich mit Epidoc
erzeugen (nicht mit Sphinx versuchen) durch die Beschreibung Verdoppelung dies, wie:
# For Epydoc only (only used for docstring)
def __init__(self, sim):
"""
__init__(self, sim)
Constructor.
@param sim: The simulator this binding is attached to.
@type sim: L{PyLabSimulatorBase}
"""
# Real Cython init
def __cinit__(self, PyLabSimulatorBase sim):
self.thisptr = new LabNetBinding()
self.sites = []
simulator = sim
Über Sphinx, param in Klassendokumentation dokumentiert werden sollen, in Konstruktor nicht, so es wird in der generierten Dokumentation gut aussehen. –