Comment puis-je lancer un Makefile dans setup.py Je ne sais pas.

j'ai besoin de compiler ICU en utilisant son propre mécanisme de construire. Donc la question:

Comment puis-je lancer un Makefile à partir de setup.py? Évidemment, je veux qu'il tourne seulement pendant le processus de construction, pas pendant l'installation.

31
demandé sur Georg Schölly 2009-11-18 13:15:42

3 réponses

la méthode que j'utilise normalement est de surcharger la commande en question:

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}, ...)

cela m'a pris un certain temps à comprendre de la distutils documentation et source, donc j'espère que ça vous évitera la douleur.

Note: Vous pouvez aussi utiliser ce cmdclass paramètre pour ajouter de nouvelles commandes.

37
répondu Walter 2012-05-04 18:37:18

si vous construisez une extension python, vous pouvez utiliser les Extensions distutils/setuptools. Par exemple:

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

Il ya beaucoup d'options pour construire des extensions, voir la doc: http://docs.python.org/distutils/setupscript.html

1
répondu resi 2009-11-18 16:20:56

il est possible de construire des bibliothèques C avec des distutils (voir le paramètre bibliothèques de distutils).core.setup), mais il se peut que vous ayez à dupliquer des options qui sont déjà dans le Makefile, donc la chose la plus facile à faire est probablement d'étendre la commande install comme expliqué dans d'autres réponses et d'appeler make avec le module subprocess.

0
répondu Éric Araujo 2011-10-28 16:01:13