Как использовать Sphinx с Cython?

Я недавно Cythonized мой проект, переименовав все модули (кроме верхнего уровня __init__.py) в *.pyx, и поместив ext_modules = [Extension('foo', ['foo.pyx'])]в setup.py. Сборка и установка работают нормально. Однако, когда я делаю cd doc; make html, Sphinx терпит неудачу, потому что он не может импортировать ни один из модулей, которые теперь *.pyx.

Если я отредактирую doc/conf.pyи заменю sys.path.insert(0, os.path.abspath('..'))на sys .path.insert(0, os.path.abspath('../build/temp.linux-x86_64-2.7')), тогда Sphinx сможет найти все модули и сгенерировать документацию, но в этом случае Я получаю такие ошибки, как ошибка при форматировании аргументов для foo.bar: <встроенная панель функций> не является функцией Python. Предположительно это связано с тем, что теперь Sphinx имеет доступ только к файлам *.so, а не к исходным файлам. Та же модификация sys.pathтакже позволяет запускать doctests через Sphinx ( make doctest).

Другим решением, которое я пробовал, было использование расширения *.pyвместо *.pyx(и использование ext_modules = [Extension('foo', ['foo .py'])]в setup.py).В этом случае документация строится корректно, но я думаю, что доктесты теперь обходят Cython.

Мне не удалось найти в Интернете информацию о совместном использовании Sphinx и Cython. Я просмотрел исходный код для некоторых проектов, которые используют оба, но они, похоже, не используют строки документации в файлах *.pyx. Я знаю, что Sage знает, но этот проект слишком сложен, чтобы я мог его разобрать.

Поддерживает ли Sphinx строки документации в файлах Cython? Если да, то как мне заставить это работать?

18
задан Dan Stahlke 7 April 2012 в 19:08
поделиться