¿Cómo uso Sphinx con Cython?

Recientemente he realizado una Citonización de un proyecto mío cambiando el nombre de todos los módulos (excepto el nivel superior__init__.py) a*.pyx, y poniendoext_modules = [Extension('foo', ['foo.pyx'])] ensetup.py. La construcción e instalación funciona bien. Sin embargo, cuando lo hagocd doc; make html, Sphinx falla porque no puede importar ninguno de los módulos que están ahora*.pyx.

Si editodoc/conf.py y cambiosys.path.insert(0, os.path.abspath('..')) asys.path.insert(0, os.path.abspath('../build/temp.linux-x86_64-2.7')), entonces Sphinx puede encontrar todos los módulos y generar documentación, pero en ese caso recibo errores comoerror while formatting arguments for foo.bar: <built-in function bar> is not a Python function. Presumiblemente esto se debe a que ahora Sphinx solo tiene acceso a la*.so archivos, no los archivos de origen. Lo mismosys.path La modificación también permite ejecutar los doctests a través de Sphinx (make doctest).

La otra solución que probé fue usar la extensión.*.py en lugar de*.pyx (y usandoext_modules = [Extension('foo', ['foo.py'])] ensetup.py). En este caso, la documentación se compila correctamente, pero creo que ahora los doctests omiten Cython.

No he podido encontrar ninguna información en línea sobre el uso de Sphinx y Cython juntos. He mirado el código fuente de algunos proyectos que usan ambos, pero parece que no hacen uso de cadenas de documentación en el*.pyx archivos. Sé que Sage lo hace, pero ese proyecto es demasiado complicado para que lo separe.

¿Admite Sphinx las cadenas de documentación en los archivos de Cython? Si es así, ¿cómo hago este trabajo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta