Come posso eseguire un Makefile in setup.py?
Domanda
Ho bisogno di compilare ICU usando il suo proprio meccanismo di accumulo. Quindi la domanda:
Come posso eseguire un Makefile da setup.py
? Ovviamente, voglio solo che venga eseguito durante il processo di compilazione, non durante l'installazione.
Soluzione
Il metodo che uso normalmente è quello di ignorare il comando in questione:
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}, ...)
Questo mi ha portato un po 'di tempo per capire dalla documentazione distutils
e la fonte, quindi spero che consente di risparmiare il dolore.
Nota: è anche possibile utilizzare questo parametro cmdclass
per aggiungere nuovi comandi
Altri suggerimenti
Se si sta costruendo un'estensione pitone è possibile utilizzare le Distutils / setuptools estensioni. Ad esempio:
from setuptools import Extension
# or:
# from distutils.extension import Extension
setup(...
ext_modules = [Extension("pkg.icu",
["icu-sqlite/icu.c"]),
]
)
Ci sono un sacco di opzioni per costruire le estensioni, vedere la documentazione: http: // docs. python.org/distutils/setupscript.html
E 'possibile costruire librerie C con distutils (si veda il parametro librerie di distutils.core.setup), ma potrebbe essere necessario duplicare le opzioni che sono già nel Makefile, quindi la cosa più semplice da fare è probabilmente quello di estendere il comando di installazione come spiegato in altre risposte e chiamare fare con il modulo sottoprocesso.