Вставить Python3 + Зависимости в C ++ Binary - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть приложение, работающее на linux 2.6, которое фактически управляет роботом. Я написал инфраструктуру и API c ++, чтобы позволить пользователю написать «Mainl oop» на c ++ для робота. Подпись функции - RobotRunL oop (const Robot & robot). Класс Robot предоставляет все необходимые API. Текущая система после компиляции устанавливает среду, а затем вызывает RobotRunL oop. Я хотел бы иметь возможность написать "mainl oop" в python вместо c ++. Таким образом, в основном запуск c ++ вызывает python mainl oop, который затем будет использовать предоставленный API для обратного вызова в c ++ для управления роботом.

Я предполагаю, что могу сделать аналогичный RobotRunL oop в python с похожим объектом робота, который содержит привязки к API c ++. Я хотел бы иметь возможность скомпилировать это в двоичный файл, который я затем смогу запустить на роботе идентично чистой версии c ++.

Мотивация для этого - возможность экспериментировать с моделями машинного обучения и приближаться к более легко экспериментальным способом. Запуск чего-либо с помощью TensorFlow или аналогичного пакета на C ++ Infra будет конечной целью

Возможно ли это вообще? Что если код python использует другие пакеты? я использую Cython или Pybind11 (ни один, кажется, не делает то, что я хочу)?

Спасибо за помощь

1 Ответ

2 голосов
/ 28 февраля 2020

Вы можете сделать это, см. Документацию Python о расширении и внедрении . Но более «стандартный» подход будет расширять Python, а не встраивать его .

Вы создадите модуль Python (скомпилируйте общий объект с python -специфичностью c C API), который охватывает ваш класс роботов. Я бы хотел использовать pybind11 или swig , чтобы помочь с этим. Вы можете запустить код инициализации C ++ либо при загрузке модуля, либо (лучше) при создании экземпляра класса.

...