我有一个用Python编写的Raspberry Pi项目,它使用RPi.GPIO模块。关于代码的所有工作都是在Windows机器上完成的,RPi.GPIO不会安装,每次我尝试运行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
有什么方法吗?
答案 0 :(得分:20)
没有办法告诉Sphinx排除一些进口。使用autodoc时,所有记录的模块必须干净可导入。
您可以通过执行一些mocking来解决问题。这篇文章描述了与您的问题非常相似的问题的解决方案:http://blog.rtwilson.com/how-to-make-your-sphinx-documentation-compile-with-readthedocs-when-youre-using-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
配置值。
答案 1 :(得分:3)
除了模拟模块之外,我还必须模拟仅在我的嵌入式系统中有意义的调用(例如,模拟从模块read_reg()
调用函数examplemod
,该函数从FPGA读取寄存器通过SPI)。
import mox as mox
import examplemod
m = mox.Mox()
m.StubOutWithMock(examplemod, 'read_reg')
请注意,您需要python-mox:sudo apt-get install python-mox
参考:How to generate sphinx documentation for python code running in an embedded system
答案 2 :(得分:0)
就在几分钟前,我找到了另一个解决方案: 不要在文件的开头放置“ import RPi.GPIO”。 将其放在函数/方法中(可能不是很好的样式)。 因此sphinx将看不到它,并且将建立一个文档。
但是使用模拟的解决方案更好,这是一个链接: http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_mock_imports
只需将以下行添加到conf.py中(RPi和serial是示例):
autodoc_mock_imports = ["RPi", 'serial']