Как я могу запустить Makefile в setup.py? - PullRequest
32 голосов
/ 18 ноября 2009

Мне нужно скомпилировать ICU , используя собственный механизм сборки. Поэтому вопрос:

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

Ответы [ 3 ]

38 голосов
/ 19 ноября 2009

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

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 голос
/ 18 ноября 2009

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

0 голосов
/ 28 октября 2011

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

...