Вызвать функцию Python из с++

Всем привет!
Мне нужно вызвать питоновскую функцию из с++ (visual studio 2019).
Однако я не очень понимаю, какие файлы и библиотеки для этого нужны
Как я понял, нужно подключить файл Python.h, который идет вместе с питоном (C:\Users\Lenovo\AppData\Local\Programs\Python\Python38\include\Python.h).
Я подключил его вот так:

#include<C:\Users\Lenovo\AppData\Local\Programs\Python\Python38\include\Python.h>

Но тогда выдает ошибку, что не удается открыть python38_d.lib.

Помогите, пожалуйста, разобраться с этим

А это для чего, что за функция?

Как вариант можно просто программно запустить питоном скрипт и прочитать его вывод (WinAPI CreateProcess и т.д.)

У меня интерфейс на с++, и нужно вызывать питоновские функции при определенных событиях. В принципе да, можно так сделать, если вызов каждой функции представить как отдельный .py файл. Спасибо за подсказку)
Но все же было бы интересно понять, как с этим python.h работать

Видимо надо найти ее в папке питона, и например добавить в список папок библиотек в настройках проекта.
c++ - How to add additional libraries to Visual Studio project? - Stack Overflow

1 лайк

Когда все же разберетесь и все заработает, то работать этот костыль будет только на той машине на которой это все собиралось.
Какая конечная цель данных извращений?

Это только про сборку проекта (каждому разработчика надо поменять путь на свой), сама программа может и будет работать (может еще .dll положить если библиотека не статическая) если кроме самой библиотеки питону ничего не надо. Тогда можно попробовать скопировать её в проект и использовать пути относительно проекта. (или поискать в NuGet, vcpkg и т.п.)

Действительно изврат какой то … Если либа не особо большая то может ее переписать лучше на си?? А если это стандартный какой то метод то может аналог есть??

Вообще я собирался сделать что-то наподобие этого Встраивание Python в C/C++: первая часть - CyberGuru.ru - все об IT и программировании
Сначала не увидел, там как раз сказано про эту библиотеку, python38_d (правда, про старую версию). Она не поставляется с питоном, ее нужно где-то отдельно скачивать, теперь ищу ее

Может в не Debug сборке проекта оно будет просить не _d версию библиотеки? Которая лежит в libs.

Скорей всего так и есть.
Обычно с постфиксом ( _d или d ) версия для отладки, без него для релиза.

Не обязательно отдельный, при вызове можно параметры передавать.
python myscript.py hello "ivan petrovich" и в питоне доставать из sys.argv или с помощью click и т.п.

Еще один вариант: поднять питоном локально какой-нибудь сервер (HTTP, …) и отправлять туда запросы.

Если очень нужно, можно заголовок подключить и использовать функционал Python.

#include <Python.h>

int main()
{
    // Загрузка интерпретатора Python
    Py_Initialize();
    // Выполнение команды в интерпретаторе
    PyRun_SimpleString("print('Hello!')");
    // Выгрузка интерпретатора Python
    Py_Finalize();
}

Link-1: Python из C (C API) / Хабр
Link-2: Интеграция Python и C++

Если возникли траблы с Python.h
Link: gcc - fatal error: Python.h: No such file or directory - Stack Overflow

Ну так автор это и пробовал )

хм, чот тут только про линукс ответы.
Там да, всё просто — установить пакет и всё, не надо самому файлы искать.

Если не Linux а Windows, тогда наверное вместо *.so файла *.dll собрать нужно будет.

Да, ну оно видимо лежит в папке питона на винде как выше было, и возможно сработает если собирать свой проект в не отладочном режиме студии.

На линуксе просто не надо искать где эти файлы лежат, оно само добавит куда надо и будет достаточно просто #include <Python.h> и чего-то типа gcc -lpython3.