你看起來有點混亂。獅身人面像並不是一個真正的語法分析器。您的Python代碼必須可以運行,以使Sphinx能夠捕獲文檔字符串。這就是爲什麼將擴展名文件重命名爲「.py」沒有幫助。
最近,我一直在與Sphinx和Cython合作,並且希望分享我的經驗......下面是完整的詳細過程,以便從docstrings中爲給定的編譯Cython擴展自動生成html文檔:
[注:我使用的獅身人面像1.1.3和用Cython 0.17.4]
首先,使用Python的「文檔字符串」(所有的限制也多了 - 通過例如,你無法用語言形容一個構造函數。見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」文件已被修改,以及分辨哪個模塊可能分析:
$ make html
這是足以讓我:
Contents:
.. toctree::
:maxdepth: 2
.. automodule:: yourextension
:members:
:undoc-members:
:show-inheritance:
最後通過做建設的文件(我在「.../_ build/html /」目錄下得到了一組html文件)。自從上一個問題被問到後,可能是Sphinx和Cython已經發展了,但我沒有處理「簽名」問題。沒有特定的Cython指令使用,也沒有任何修正適用於獅身人面像...
希望這會有所幫助。
編輯:好吧,我想回我的話。我遇到了這個問題,「丹」在使用Epydoc時提到了關於「embedignature」的問題(所以我想這也是Sphinx的一個問題)。激活此編譯器指令不發送蟒符合簽名反正:
PyLabNode.SetNetwork(self, PyLabNetwork net)
這有2個缺點:對於類的前綴和輸入參數的點號。
最後,我能想出發送正確的人的唯一辦法是在文檔字符串的,像這樣的第一行寫一個兼容的簽名:
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的用戶...
編輯:關於__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
關於獅身人面像,PARAM應類文檔中進行記錄,而不是在構造函數,所以它在生成的文檔中看起來不錯。 – 2014-10-01 09:30:41