如何在setup.py中运行Makefile?
我需要使用ICU自己的构建方式来编译它。因此,我有个问题:
我该如何在setup.py
中运行一个Makefile?显然,我只想在构建过程中运行它,而不是在安装的时候。
3 个回答
0
你可以用distutils来构建C语言的库(可以查看distutils.core.setup中的libraries参数),不过你可能需要重复一些已经在Makefile里的选项。所以,最简单的方法可能是扩展安装命令,像其他回答中提到的那样,然后用subprocess模块来调用make命令。
2
如果你正在创建一个Python扩展,可以使用distutils或setuptools这两个工具来帮助你。比如说:
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
44
我通常使用的方法是重写相关的命令:
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
参数来添加新的命令。