Подтвердить что ты не робот

Как запустить Makefile в setup.py?

Мне нужно скомпилировать ICU с помощью собственного механизма сборки. Поэтому вопрос:

Как запустить Makefile с setup.py? Очевидно, я только хочу, чтобы он запускался во время процесса сборки, а не при установке.

4b9b3361

Ответ 1

Метод, который я обычно использую, заключается в переопределении данной команды:

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 для добавления новых команд.

Ответ 2

Если вы создаете расширение 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

Ответ 3

Можно создать библиотеки C с distutils (см. параметр libraries distutils.core.setup), но вам, возможно, придется дублировать параметры, которые уже находятся в Makefile, поэтому проще всего сделать это, чтобы расширить установить команду, как описано в других ответах, и вызвать make с модулем подпроцесса.