【发布时间】:2010-12-17 19:38:54
【问题描述】:
我需要使用它自己的构建机制编译ICU。因此问题:
如何从setup.py 运行 Makefile?显然,我只希望它在构建过程中运行,而不是在安装时运行。
【问题讨论】:
我需要使用它自己的构建机制编译ICU。因此问题:
如何从setup.py 运行 Makefile?显然,我只希望它在构建过程中运行,而不是在安装时运行。
【问题讨论】:
我通常使用的方法是覆盖有问题的命令:
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 参数来添加新命令。
【讨论】:
distutils.command.install 更改为 setuptools.command.install 则可以,取自 stackoverflow.com/questions/15853058/…
可以使用 distutils 构建 C 库(参见 distutils.core.setup 的 libraries 参数),但您可能必须复制 Makefile 中已有的选项,因此最简单的做法可能是扩展按照其他回复中的说明安装命令,并使用子进程模块调用 make。
【讨论】:
如果你正在构建一个 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
【讨论】: