Недавно я написал 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? Если да, то как это сделать?