Pareces un poco confundido aquí. Sphinx no es realmente un analizador sintáctico. Su código Python tiene que ser ejecutable para que Sphinx pueda atrapar las cadenas de documentos. Es por eso que renombrar los archivos de extensiones a ".py" no ayuda.
Bueno, he estado trabajando con Sphinx y Cython recientemente, y me gustaría compartir mi experiencia ... Aquí está el procedimiento detallado para obtener la generación automática de una documentación html para una extensión compilada de Cython de docstrings:
[Nota: he utilizado Sphinx 1.1.3 y 0.17.4 Cython]
en primer lugar, utilice "cadenas de documentación" de la pitón (con todas las limitaciones que puede tener - por ejemplo, no se puede describir un constructorVer docstrings especificaciones) en su código Cython:
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
y recompilar "yourextension.so".
A continuación, ejecute "sphinx-quickstart" y responda las preguntas. No olvides decir que sí cuando te pregunten por "autodoc". Esto generará el archivo "Makefile", el archivo "index.rst" y los archivos "conf.py".
Esta última "conf.py" tiene que ser editado para contar Esfinge fueron para encontrar su módulo:
# 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/'))
El archivo "index.rst" tiene que ser editado, así decir cuál podría ser el módulo analizados:
Contents:
.. toctree::
:maxdepth: 2
.. automodule:: yourextension
:members:
:undoc-members:
:show-inheritance:
Finalmente construir la documentación haciendo:
$ make html
Eso fue suficiente para mí (Obtuve el conjunto resultante de archivos html en un directorio ".../_ build/html /"). Puede ser que Sphinx y Cython hayan evolucionado desde que se hizo la pregunta anterior, pero no tenía problemas de "firma" para tratar. Ninguna directiva particular de Cython para usar, ni ninguna corrección para aplicar a Sphinx ...
Espero que esto ayude.
EDIT: Bueno, me gustaría recuperar mis palabras. Me encontré con el problema que "Dan" mencionaba sobre el tema "Embedsignature" durante el uso de Epydoc (así que supongo que este es un problema con Sphinx también). La activación de esta directiva del compilador no envía las firmas que cumplen con pitón de todos modos:
PyLabNode.SetNetwork(self, PyLabNetwork net)
Esto tiene 2 inconveniente: la notación para el prefijo de clase y el parámetro escrito.
Al final, la única manera de que pudiera averiguar para enviar las correctas fue escribir una firma conformes en la primera línea de las cadenas de documentación de este modo:
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
la esperanza que esto puede ayudar tanto Sphinx y los usuarios Epydoc ...
EDIT: en cuanto a la __cinit__
, yo era capaz de generar el documento con éxito con Epidoc
(no probé con Sphinx) al duplicar la descripción , De esta manera:
# 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
sobre Sphinx, parámetro debe ser documentada en la documentación de la clase, no en el constructor, por lo se verá bien en la documentación generada. –