Вы выглядите немного путаным здесь. Sphinx на самом деле не синтаксический анализатор. Ваш код Python должен быть запущен, чтобы Sphinx смог поймать docstrings. Вот почему переименование файлов расширений на «.py» не помогает.
Ну, я недавно работал с Sphinx и Cython и хотел бы поделиться своим опытом ... Вот подробная процедура получения автоматизированной генерации html-документации для данного скомпилированного расширения Cython из docstrings:
[Примечание: Я использовал Sphinx 1.1.3 и Cython 0.17.4]
Прежде всего, используйте питон «строку документацию» (со всеми ограничениями, он может иметь - к примеру, вы не можете описать конструктор.См docstrings спецификации) в коде 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
И перекомпилировать "yourextension.so".
Затем запустите «sphinx-quickstart» и ответьте на вопросы. Не забудьте сказать «да», когда его попросят «autodoc». Это создаст файл «Makefile», «index.rst» и файлы «conf.py».
Этот последний «conf.py» должен быть отредактирован, чтобы сказать Сфинкса были найти свой модуль:
# 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/'))
«index.rst» файл должен быть отредактирован, а также сказать, какой модуль может быть проанализированы:
Contents:
.. toctree::
:maxdepth: 2
.. automodule:: yourextension
:members:
:undoc-members:
:show-inheritance:
Наконец построить документацию, выполнив:
$ make html
Этого было достаточно для меня (Я получил результирующий набор html-файлов в каталоге «.../_ build/html /»). Может быть, Сфинкс и Китон развились после того, как был задан предыдущий вопрос, но у меня не было проблем с «сигнатурой». Никакой конкретной директивы Cython для использования или каких-либо исправлений для применения к Sphinx ...
Надеюсь, это поможет.
EDIT: Хорошо, я хотел бы вернуть слова. Я столкнулся с проблемой, которую «Дэн» упоминал в отношении вопроса «embedsignature» при использовании Epydoc (так что я полагаю, что это проблема и для Sphinx). Активация этой директива компилятора не отправляет питон совместимых подписей в любом случае:
PyLabNode.SetNetwork(self, PyLabNetwork net)
Это имеет 2 недостатка: Пунктирное обозначение класса префикс и типизированный параметр.
В конце концов, единственный способ, которым я мог понять, чтобы послать правильные данные было написать послушную подпись на самой первой линии строк DOC, как так:
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
Надежда это может помочь и Сфинкса и Epydoc пользователей ...
EDIT: Что касается __cinit__
, я был в состоянии генерировать документ успешно с Epidoc
(не пробовал с Сфинкса), удваивая описание , Как это:
# 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
О Сфинксе, пары должны быть задокументированы в документации класса, а не в конструкторе, так он будет хорошо смотреться в сгенерированной документации. –