Преамбула:
Python setuptools используются для распространения пакета. У меня есть пакет Python (назовем его my_package), у которого есть несколько пакетов extra_require. Все работает, просто найдите (установка и сборка пакета, а также дополнительные функции, если они были запрошены), поскольку все extra_require были самими пакетами python, и pip правильно разрешил все. Простой pip install my_package работал как шарм.
Настройка:
Теперь для одной из дополнительных функций (назовем ее extra1) мне нужно вызвать двоичный код библиотеки, отличной от python X.
Сам модуль X (исходный код) был добавлен в кодовую базу my_package и был включен в дистрибутив my_package. К сожалению, для меня, X нужно сначала скомпилировать в двоичный файл на целевой машине (реализация на С++, я предполагаю, что такая компиляция должна произойти на этапе сборки установки my_package). В библиотеке X есть библиотека Makefile, оптимизированная для различной компиляции платформы, поэтому все, что необходимо, - это запустить make в соответствующем каталоге библиотеки X в my_package, когда выполняется процесс сборки,
Вопрос № 1: как запустить команду терминала (т.е. make в моем случае) во время процесса сборки пакета, используя setuptools/distutils?
Вопрос № 2: как обеспечить, чтобы такая команда терминала выполнялась только в том случае, если в процессе установки указан соответствующий extra1?
Пример:
- Если кто-то запускает
pip install my_package, такой дополнительной компиляции библиотекиXне будет. - Если кто-то запускает
pip install my_package [extra1], необходимо скомпилировать модульX, поэтому соответствующий файл будет создан и доступен на целевой машине.