2011-12-22 24 views
4

可以使用sphinx的.. automodule ::和其他自動功能來記錄包含from x import *語句的模塊,而不包括來自導入模塊的所有文檔?使用「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

什麼是「測試版」? – mzjn

+0

「pylab」中的第一個模塊按字母順序排列 – keflavich

回答

4

是的,這應該工作。從the documentation

在與各成員選項設置automodule指令,僅模塊成員,其作爲__module__給automodule將被記錄屬性等於模塊的名字。這是爲了防止導入的類或函數的文檔。


更新:

這個問題似乎是很多pylab成員__module__屬性爲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包括betamzjn

但如果

beta.__module__ = "pylab" 

添加到pylabtest.py,只有mzjn被記錄在案。

+0

謝謝......那沒用,我也不明白爲什麼,但是我會看看是否有函數的__module__屬性。 – keflavich

+0

感謝您的更新;對不起,我錯過了一個星期。我想你已經發現了這個問題,任何想法爲什麼會發生?即爲什麼pylab函數是無父母的?無論如何,我接受你的回答,並在我的問題 – keflavich

+0

包括一個(相當醜陋的)解決方法,我也想知道爲什麼會出現問題。真奇怪。 'pylab.beta'有一個'__module__'屬性,其值爲None。但'numpy.random.mtrand.RandomState.beta'甚至沒有'__module__'屬性。 – mzjn

相關問題