He escrito un módulo de Python que incluye un submódulo escrito en C: el módulo en sí se llama foo
y la parte C es foo._bar
. La estructura se parece a:Uso de Sphinx con una extensión C de distutils
src/
foo/__init__.py <- contains the public stuff
foo/_bar/bar.c <- the C extension
doc/ <- Sphinx configuration
conf.py
...
foo/__init__.py
importaciones _bar
aumentarlo, y las cosas útiles se expone en el módulo foo
. Esto funciona bien cuando está construido, pero obviamente no funcionará en forma no compilada, ya que _bar
no existe hasta que se construye.
Me gustaría utilizar Sphinx para documentar el proyecto y utilizar la extensión autodoc en el módulo foo
. Esto significa que necesito construir el proyecto antes de poder construir la documentación.
Como construyo con distutils, el módulo construido termina en un nombre variable llamado dir build/lib.linux-ARCH-PYVERSION
- lo que significa que no puedo simplemente codificar el directorio en una Sphinx 'conf.py
.
Entonces, ¿cómo configuro mi secuencia de comandos distutils setup.py
para ejecutar el constructor Sphinx sobre el módulo integrado?
Para completar, aquí está la llamada a setup
(las cosas 'falsas' son los constructores de encargo que subclase build
y build_ext
):
setup(cmdclass = {
'fake': fake,
'build_ext_fake' : build_ext_fake
},
package_dir = {'': 'src'},
packages = ['foo'],
name = 'foo',
version = '0.1',
description = desc,
ext_modules = [module_real])
Ese es un enfoque bastante bueno, podría ponerlo justo en 'conf.py' (creo). Lo intentaré mañana. – detly
Aha ... Necesitaba usar 'build_lib', no' build_temp', y meterme con mi compilación cruzada, pero parece estar funcionando (¡y en la parte de la extensión también, como una bonificación adicional!) – detly
Cool, if quieres puedo agregar más detalles (o agregar una respuesta con tus pasos exactos para que otros puedan beneficiarse). – TryPyPy