Sphinx: как исключить импорт в автомодуле?
У меня есть проект Raspberry Pi, написанный на Python, который использует модуль 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
Как это обойти?
Ответы
Ответ 1
Нет никакого способа сказать Сфинксу об исключении некоторых импортов. При использовании autodoc все документированные модули должны быть чисто импортируемыми.
Возможно, вы сможете обойти эту проблему с помощью насмешек. Вот статья, описывающая решение проблемы, которая кажется очень похожей на вашу: http://blog.rtwilson.com/how-to-make-your-sphinx-documentation-compile-with-readthedocs-when-youre-using -полученный и скучный. Вот небольшой пример кода (предназначенный для добавления в 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
Обновить
Начиная со Сфинкса 1.3, проще настроить насмешку. Просто добавьте модули, которые нужно autodoc_mock_imports
к autodoc_mock_imports
конфигурации autodoc_mock_imports
.
Ответ 2
Помимо издевательских модулей, мне также приходилось издеваться над вызовами, которые имели смысл только в моей встроенной системе (например, издевательский вызов функции 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
Ссылка: Как сгенерировать документацию sphinx для кода python, запущенного во встроенной системе
Ответ 3
Всего несколько минут назад я нашел другое решение: не помещайте "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']