Мне нужно скомпилировать 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
для добавления новых команд.
distutils.command.install
на setuptools.command.install
, это произойдет, взято из stackoverflow.com/questions/15853058/
- person wxs; 24.10.2016
Если вы создаете расширение 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
Можно собрать библиотеки C с помощью distutils (см. параметр library в distutils.core.setup), но вам, возможно, придется продублировать параметры, которые уже есть в Makefile, поэтому, вероятно, проще всего расширить команду установки как объясняется в других ответах и вызовите make с модулем подпроцесса.