2009-11-18 25 views

Respuesta

33

El método que normalmente uso es para 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 llevó Me tomó un buen tiempo descifrar de la documentación y fuente de distutils, así que espero que te ahorre el dolor.

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

+1

Gracias por la respuesta. Me salva el dolor? Más o menos, ya he pasado demasiado tiempo buscando esta respuesta ... –

+6

después de leer esta respuesta. He implementado algo similar y funciona bastante bien (https://github.com/Turbo87/py-xcsoar/blob /master/setup.py). el código ejecuta un Makefile que crea dos ejecutables y el setup.py modificado entonces incluso instala estos ejecutables en el sistema. lo mismo sería posible para instalar cualquier tipo de biblioteca también. – TBieniek

+0

Tenga en cuenta que esto no parece funcionar bien con pip, sin embargo, si cambia 'distutils.command.install' por' setuptools.command.install', lo hace, tomado de http://stackoverflow.com/questions/15853058/ run-custom-task-when-call-pip-install – wxs

1

Si está construyendo una extensión de python, puede usar las extensiones de 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 un montón de opciones para construir extensiones, ver los documentos: http://docs.python.org/distutils/setupscript.html

+0

No es una extensión que quiero construir, sino solo una biblioteca C que no se vinculará con Python. (Es una extensión de sqlite.) –

0

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

Cuestiones relacionadas