我正在嘗試生成一個matplotlib模擬器,以便可以使用ReadTheDocs編譯我的文檔,但遇到了問題。如何模擬,以便`從x導入*`工作
在我的代碼中,我使用from matplotlib.pyplot import *
導入matplotlib。
我使用下面的代碼爲我的嘲弄(由ReadTheDocs FAQ的建議):
class Mock(object):
def __init__(self, *args, **kwargs):
pass
def __call__(self, *args, **kwargs):
return Mock()
@classmethod
def __getattr__(cls, name):
if name in ('__file__', '__path__'):
return '/dev/null'
elif name[0] == name[0].upper():
return type(name,(), {})
else:
return Mock()
MOCK_MODULES = ['numpy', 'scipy', 'matplotlib', 'matplotlib.pyplot']
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = Mock()
但是,運行from matplotlib.pyplot import *
當我說的錯誤TypeError: 'type' object does not support indexing
。
有沒有一種方法可以改變我的模擬,以便它允許我使用from x import *
樣式導入matplotlib?我不需要任何特定的功能可用,我只需要它就可以導入,以便ReadTheDocs可以正確導入代碼。
邊注:不要推出自己的通用模擬。使用3.3中出色的'mock'庫。它甚至在標準庫中。 – delnan 2012-08-09 06:08:26
感謝您的評論 - 我發現導入'mock'庫,然後使用'mock.Mock'類而不是ReadTheDocs建議的類,這一切都很好。 – robintw 2012-08-10 14:16:34