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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top