使用“from x import *”记录文件

时间:2011-12-22 18:38:06

标签: python python-sphinx matplotlib

可以使用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'

1 个答案:

答案 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输出包括betamzjn

但是如果

beta.__module__ = "pylab"

添加到pylabtest.py,仅记录mzjn