Страницы

Поиск по вопросам

вторник, 21 мая 2019 г.

Как с помощью python сделать модуль для c++

Как с помощью python 3.6.1 сделать модуль для c++ Тоесть написать на python какой-то модуль чет с ним сделать и запускать через c++ допустим print("Hello, world") и когда мы импортируем эту библиотеку в c++ то будет выводить Hello, world


Ответ

Вы можете Питон-код как внешнюю команду вызвать. К примеру:
#include
int main() { return system("python -mwebbrowser http://example.com"); }

Чтобы выполнить Питон-код в С++, можно встроить (embed) Python-интерпретатор
#include
int main() { Py_Initialize(); PyRun_SimpleString("print('hello world')"); return Py_FinalizeEx() < 0; }
Чтобы собрать программу, можно Makefile использовать:
NAME := embed-python-interpreter PYTHON_VERSION := python-3.6
$(NAME): $(NAME).cc $(CXX) `pkg-config --cflags ${PYTHON_VERSION}` $< -o $@ `pkg-config --libs ${PYTHON_VERSION}`
Также можно встраивать Питон, используя cffi, cython

Можно скомпилировать подмножество кода на Питоне в Си. К примеру, используя Pypy translate.py программу, которая умеет RPython в Си транслировать.

Обычно, наоборот C/C++ код используется, чтобы расширение для Питона создать или напрямую с помощью ctypes, cffi Си код вызывается из Питона:
>>> import ctypes >>> libc = ctypes.CDLL(None) >>> libc.printf(b"abc
") abc 4
Здесь вызывается printf() Си функция из libc, включённой в CPython интерпретатор. abc это вывод в C stdout. 4 это Python REPL печатает возвращаемое значение из printf() (4 байта напечатано). Вот более сложные примеры:
вызов clock_gettime() Си функции из (-lrt) на Linux вызов FindFirstFileW() из kernel32 на Windows, чтобы реализовать аналог os.path.islink(), который junctions поддерживает
Вот пример использования OpenSSL API, чтобы из x509 сертификата серийный номер достать который показывает, что при вызове многих функций, удобней более высокоуровневыми библиотеками пользоваться нежели напрямую ctypes
Cython удобен, чтобы интегрировать С/C++ код с Питоном или заметно ускорить Питон код. clipped_cumsum(), реализованная в Cython, в 100 раз быстрее аналога на чистом Питоне и иногда даже на порядок быстрее реализаций с помощью numpy, pandas, примеры: rotT(), max_rolling_sum(). Cython позволяет отпускать GIL, поэтому возможно ускорить чистые вычисления с помощью нескольких потоков, пример: b2a_bin(). Cython можно встретить в исходниках популярных библиотек таких как lxml, numpy, scipy, pandas, scikit-learn.

Комментариев нет:

Отправить комментарий