Я недавно 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? Если да, то как мне заставить это работать?