可以使用sphinx的.. automodule ::和其他自动功能来记录包含from x import *
语句的模块,而不包括导入模块的所有文档吗?
编辑:
根据mzjn的观点,只要导入的方法'__module__
属性与模块名称不同,就不应该记录它们。但是,对于我的一些模块,它们是。
我的MLE只是一个文件test_doc.py
文件,其中包含以下行:
from pylab import *
和文档:
.. automodule:: agpy.test_doc
:members:
如果我在test_doc.py
中包含此行:
print "beta.__module__:",beta.__module__
我得到了预期的结果:
beta.__module__: None
知道发生了什么事吗?我可以在conf.py
中搞砸了吗?
编辑:根据mzjn的回答,解决方法是更改具有__module__
的那些函数的__module__==None
属性:
import pylab
from pylab import *
for k,v in pylab.__dict__.iteritems():
if hasattr(v,'__module__'):
if v.__module__ is None:
locals()[k].__module__ = 'pylab'
答案 0 :(得分:4)
是的,这应该有效。来自the documentation:
在设置了members选项的automodule指令中,只记录
__module__
属性等于给予自动模块的模块名称的模块成员。这是为了防止导入类或函数的文档。
更新
问题似乎是许多__module__
成员的pylab
属性是None
(在C / Cython模块mtrand
中定义的成员,就我而言可以告诉)。
mtrand
模块是NumPy的一部分。在幕后,pylab.beta
(以及其他几个函数)是类numpy.random.mtrand.RandomState
的方法。我可以按如下方式重现文档问题:
使用此源(pylabtest.py)
from pylab import beta
def mzjn(x):
"""mzjn docstring"""
return x
和这个源文档(pylabtest.rst)
Pylab test
==========
.. automodule:: pylabtest
:members:
pylabtest.html中的Sphinx输出包括beta
和mzjn
。
但是如果
beta.__module__ = "pylab"
添加到pylabtest.py,仅记录mzjn
。