Подтвердить что ты не робот

Вызов python из программы С++ для распространения

Я хотел бы вызвать python script файлы из моей программы на С++.

Я не уверен, что у людей, которых я буду распространять, будет установлен python.

В основном я ищу .lib файл, который я могу использовать, у которого есть лицензия на дистрибутив Apache.

4b9b3361

Ответ 1

У Boost есть библиотека интерфейса python, которая может вам помочь.

Boost.Python

Ответ 2

Я хотел бы вызвать python script файлы из моей программы на С++.

Это означает, что вы хотите встроить Python в свое приложение на С++. Как упоминалось в Внедрение Python в другое приложение:

Вложение Python аналогично расширяя его, но не совсем. разница в том, что когда вы расширяетесь Python, основная программа приложение все еще Python интерпретатор, а если вы вставляете Python, основная программа может иметь не имеет ничего общего с Python - вместо этого, некоторые части приложения иногда называют Python интерпретатор для запуска кода Python.

Я предлагаю вам сначала перейти Внедрение Python в другое приложение. Затем обратитесь к приведенным ниже примерам

Если вам нравится Boost.Python, вы можете посетить следующие ссылки:

Ответ 3

Вставка интерпретатора Python внутри вашего приложения на С++ позволит вам запускать программы Python, используя приложение, запускающее скрипты Python. Это также упростит, чтобы эти сценарии могли вызвать функции С++ в вашем приложении. Если это то, что вам нужно, то ранее упомянутая ранее библиотека Boost может быть тем, что вы хотите упростить для создания ссылки. В прошлом я использовал SWIG для создания интерфейсов Python для кода на С++. Из вашего вопроса неясно, хотите ли вы, чтобы скрипты Python вызывали вашу программу на С++ или вы просто хотели, чтобы С++ вызывал Python.

Многие из функций Python используют модули, которые не встроены в интерпретатор Python. Если ваши скрипты Python вызывают эти функции, вам необходимо либо установить Python своих пользователей, либо включить файлы времени выполнения python с вашим приложением. Это будет зависеть от того, какие модули вы импортируете в сценарии Python.

Ответ 4

Boost, вероятно, лучший выбор, однако, если вы хотите что-то более автономное, и если оно предназначено для использования с Windows (что представляется возможным, учитывая, что они являются людьми, которые, по всей вероятности, имеют Python), вы можете используйте py2exe, чтобы создать DLL с точками входа, подходящими для COM-объектов. Затем вы можете взаимодействовать с библиотекой через COM. (Очевидно, это совсем не полезно как кросс-платформенное решение).

Ответ 5

Интересно, что еще никто не упомянул pybind11. Из их документации:

pybind11 - это легкоspringя библиотека только для заголовков, которая предоставляет типы C++ в Python и наоборот, в основном для создания привязок Python к существующему коду C++. Его цели и синтаксис аналогичны отличной библиотеке Boost.Python Дэвида Абрахамса: минимизировать шаблонный код в традиционных модулях расширения, выводя информацию о типах с помощью самоанализа во время компиляции. [...] С момента своего создания эта библиотека вышла за пределы Boost.Python во многих отношениях, что привело к значительному упрощению связывания кода во многих распространенных ситуациях.

Конкретно, вызов функции Python (называемой встраиванием) так же прост (как взято из документации):

#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;

int main() {
    py::scoped_interpreter guard{}; // start the interpreter and keep it alive
    py::print("Hello, World!"); // use the Python API
}

Ответ 6

Используйте системный вызов для запуска скрипта Python из C++

#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result; 
}