28

RPi.GPIO モジュールを使用する Python で記述された Raspberry Pi プロジェクトがあります。コードのすべての作業は、RPi.GPIO がインストールされない Windows ボックスで行われ、autodoc を実行しようとするたびに、RPi.GPIO をインポートできないと言ってクラッシュします。

D:\cube\docs\ledcube.rst:4: WARNING: autodoc: failed to import module u'ledcube'
; the following exception was raised:
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\sphinx-1.2b1-py2.7.egg\sphinx\ext\autodoc.
py", line 326, in import_object
    __import__(self.modname)
  File "D:\cube\ledcube.py", line 2, in <module>
    import RPi.GPIO as GPIO
ImportError: No module named RPi.GPIO

これを回避する方法はありますか?

4

3 に答える 3

41

一部のインポートを除外するよう Sphinx に指示する方法はありません。autodoc を使用する場合は、文書化されたすべてのモジュールを完全にインポートできる必要があります。

モックを作成することで、問題を回避できる場合があります。あなたの問題に非常に似ていると思われる問題の解決策を説明する記事は次のとおりです。 -numpy-and-scipy/ . これは小さなコードサンプルです (conf.py に追加することを意図しています):

import mock

MOCK_MODULES = ['numpy', 'matplotlib', 'matplotlib.pyplot']
for mod_name in MOCK_MODULES:
    sys.modules[mod_name] = mock.Mock()

上記を機能させるには、python-mock をインストールする必要がある場合があります。sudo apt-get install python-mock

アップデート

Sphinx 1.3 から、モッキングの設定が簡単になりました。モックするモジュールをautodoc_mock_imports構成値に追加するだけです。

于 2013-04-09T21:04:07.453 に答える
5

モジュールをモックするだけでなく、組み込みシステムでのみ意味のある呼び出しもモックする必要がありました (たとえば、SPI を介して FPGA からレジスタを読み取るread_reg()モジュールからの関数呼び出しをモックするなど)。examplemod

import mox as mox 
import examplemod
m = mox.Mox()
m.StubOutWithMock(examplemod, 'read_reg')

python-mox が必要であることに注意してください。sudo apt-get install python-mox

参照:組み込みシステムで実行される Python コードの sphinx ドキュメントを生成する方法

于 2013-10-09T17:06:58.143 に答える