¿Cómo puedo ejecutar un Makefile en setup.py?

Necesito comstackr ICU usando su propio mecanismo de comstackción. Por lo tanto la pregunta:

¿Cómo puedo ejecutar un Makefile desde setup.py ? Obviamente, solo quiero que se ejecute durante el proceso de comstackción, no durante la instalación.

El método que normalmente utilizo es anular el comando en cuestión:

 from distutils.command.install import install as DistutilsInstall class MyInstall(DistutilsInstall): def run(self): do_pre_install_stuff() DistutilsInstall.run(self) do_post_install_stuff() ... setup(..., cmdclass={'install': MyInstall}, ...) 

Esto me tomó bastante tiempo para descubrir la documentación y la fuente de distutils , así que espero que te salve el dolor.

Nota: también puede usar este parámetro cmdclass para agregar nuevos comandos.

Si está construyendo una extensión de python, puede usar las extensiones distutils / setuptools. Por ejemplo:

 from setuptools import Extension # or: # from distutils.extension import Extension setup(... ext_modules = [Extension("pkg.icu", ["icu-sqlite/icu.c"]), ] ) 

Hay muchas opciones para construir extensiones, vea los documentos: http://docs.python.org/distutils/setupscript.html

Es posible crear bibliotecas de C con distutils (ver el parámetro de bibliotecas de distutils.core.setup), pero es posible que tenga que duplicar las opciones que ya están en Makefile, por lo que lo más fácil es extender el comando de instalación como Se explica en otras respuestas y se llama make con el módulo de subproceso.