Мне нужно скомпилировать ICU, используя собственный механизм сборки. Поэтому вопрос:Как запустить Makefile в setup.py?
Как запустить Makefile с setup.py
? Очевидно, я только хочу, чтобы он запускался во время процесса сборки, а не при установке.
Мне нужно скомпилировать ICU, используя собственный механизм сборки. Поэтому вопрос:Как запустить Makefile в setup.py?
Как запустить 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}, ...)
Это произошло мне достаточно времени, чтобы разобраться с документацией и источником, поэтому я надеюсь, что это избавит вас от боли.
Примечание: вы также можете использовать этот параметр cmdclass
для добавления новых команд.
Если вы строите расширение python, вы можете использовать Extutils/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, которая не будет связана с Python. (Это расширение для sqlite.) –
Возможно создание библиотек C с distutils (см. Параметр libraries distutils.core.setup), но вам, возможно, придется дублировать параметры, которые уже находятся в Makefile, поэтому проще всего сделать это команды установки, как объяснено в других ответах и вызове make с модулем подпроцесса.
Спасибо за ответ. Сохраняет мне боль? Сортировка, я уже потратил слишком много времени на поиск этого ответа ... –
после прочтения этого ответа я реализовал нечто подобное, и он работает довольно хорошо (https://github.com/Turbo87/py-xcsoar/blob /master/setup.py). код запускает Makefile, который создает два исполняемых файла и измененный setup.py, а затем даже устанавливает эти исполняемые файлы в систему. То же самое можно было бы установить и для любой библиотеки. – TBieniek
Обратите внимание, что это, похоже, не очень хорошо работает с пипсом, однако, если вы измените 'distutils.command.install' на' setuptools.command.install', это делается, взятый из http://stackoverflow.com/questions/15853058/ run-custom-task-when-call-pip-install – wxs