Недавно я написал Cythonized проект my, переименовав все модули (за исключением верхнего уровня __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 может найти все модули и может генерировать документацию, но в этом случае я получаю ошибки, такие как error while formatting arguments for foo.bar: <built-in function bar> is not a Python function. Предположительно это происходит потому, что теперь Sphinx имеет доступ только к файлам *.so, а не к исходным файлам. Эта же модификация sys.path также позволяет запускать доктрины через Sphinx (make doctest).
Другим решением, которое я пробовал, было использование расширения *.py вместо *.pyx (и использование ext_modules = [Extension('foo', ['foo.py'])] в setup.py). В этом случае документация строит правильно, но я думаю, что доктрины теперь обойти Cython.
Я не смог найти какую-либо информацию в Интернете относительно совместного использования Sphinx и Cython. Я рассмотрел исходный код для некоторых проектов, которые используют оба варианта, но они, похоже, не используют docstrings в файлах *.pyx. Я знаю, что Sage делает, но этот проект слишком сложный для меня, чтобы разобрать.
Поддерживает ли Sphinx docstrings в файлах Cython? Если да, то как это сделать?