我需要使用它自己的构建机制来编译ICU。因此问题:
如何从setup.py
运行Makefile?显然,我只希望它在构建过程中运行,而不是在安装时运行。
答案 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。