11

ReadTheDocsを使用してドキュメントをコンパイルできるようにmatplotlibのモックを作成しようとしていますが、問題が発生しました。

私のコードでは、を使用してmatplotlibをインポートしfrom matplotlib.pyplot import *ます。

私はモックに次のコードを使用しています(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がコードを正しくインポートできるように、インポートできるようにする必要があります。

4

1 に答える 1

7

経由でインポートする場合は、モジュールでリスト*を定義する必要があります。__all__同じことがあなたのクラスにも当てはまります: クラスに__all__属性を追加するだけでうまくいきます:

class Mock(object):
    __all__ = []
于 2012-08-09T07:35:07.643 に答える