Sto provando a produrre un Mock di matplotlib in modo che possa compilare i miei documenti usando ReadTheDocs, ma ho incontrato un problema.Come scherzare in modo che `da x import *` funzioni
Nel mio codice, importare matplotlib utilizzando from matplotlib.pyplot import *
.
Sto usando il seguente codice per i miei Mocks (come suggerito dal 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()
Tuttavia, durante l'esecuzione from matplotlib.pyplot import *
ottengo un errore dicendo che TypeError: 'type' object does not support indexing
.
C'è un modo per cambiare il mio Mock in modo che possa importare matplotlib usando lo stile from x import *
? Non ho bisogno di alcuna funzione particolare da rendere disponibile, ho solo bisogno che sia in grado di essere importato in modo che ReadTheDocs possa importare correttamente il codice.
laterale: non rotolare il proprio finto general-purpose. Usa l'eccellente libreria 'mock', in 3.3. è anche nella libreria standard. – delnan
Grazie per il commento: ho scoperto che importare la libreria 'mock' e poi usare la classe' mock.Mock' invece di quella suggerita da ReadTheDocs ha reso tutto funzionante. – robintw