Преамбула:
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
, поэтому соответствующий файл будет создан и доступен на целевой машине.