Мне нужно скомпилировать ICU с помощью собственного механизма сборки. Поэтому вопрос:
Как запустить Makefile с setup.py
? Очевидно, я только хочу, чтобы он запускался во время процесса сборки, а не при установке.
Мне нужно скомпилировать ICU с помощью собственного механизма сборки. Поэтому вопрос:
Как запустить Makefile с setup.py
? Очевидно, я только хочу, чтобы он запускался во время процесса сборки, а не при установке.
Метод, который я обычно использую, заключается в переопределении данной команды:
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
для добавления новых команд.
Если вы создаете расширение 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
Можно создать библиотеки C с distutils (см. параметр libraries distutils.core.setup), но вам, возможно, придется дублировать параметры, которые уже находятся в Makefile, поэтому проще всего сделать это, чтобы расширить установить команду, как описано в других ответах, и вызвать make с модулем подпроцесса.