如何在setup.py中运行Makefile?

时间:2009-11-18 10:15:42

标签: python distutils

我需要使用它自己的构建机制来编译ICU。因此问题:

如何从setup.py运行Makefile?显然,我只希望它在构建过程中运行,而不是在安装时运行。

3 个答案:

答案 0 :(得分:38)

我通常使用的方法是覆盖有问题的命令:

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

我花了很长时间才从distutils文档和来源中找到答案,所以我希望它可以为你节省痛苦。

注意:您也可以使用此cmdclass参数添加新命令。

答案 1 :(得分:1)

如果要构建python扩展,可以使用distutils / setuptools Extensions。例如:

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

有很多选项可以构建扩展程序,请参阅文档:http://docs.python.org/distutils/setupscript.html

答案 2 :(得分:0)

可以使用distutils构建C库(请参阅distutils.core.setup的libraries参数),但您可能必须复制Makefile中已有的选项,因此最简单的方法是扩展按照其他回复中的说明安装命令,并使用子进程模块调用make。