2015-03-03 4 views
1

Позвольте мне начать с заявления об отказе от ответственности за то, что я задаю этот вопрос после много исследований и не нахожу прямого и поэтапного примера.Импорт функций из файла .cpp в python

прошли Cython, SWIG, Boostpython документации, но не смог получить шаг за шагом процесс и поэтому размещение здесь -

У меня есть .cpp & .h файл с парой математических функций defined.I хотят для вызова их в файле кода python (.py).

Как я могу интегрировать? Какой из лучших и опрятных способов решить эту проблему. Просьба пояснить

+0

Большинство людей рассмотрят [это] (http://www.swig.org/tutorial.html) и [это] (http://www.boost.org/doc/libs/1_57_0/libs/python/ doc/tutorial/doc/html/index.html), чтобы быть пошаговыми инструкциями для SWIG и Boost.Python, соответственно. Что именно вам нужно, чтобы они не предоставляли? –

+1

Этот вопрос [сообщение] [1], кажется, отвечает на ваш вопрос, используя библиотеки ctypes. [1]: http: //stackoverflow.com/questions/145270/calling-c-c-from-python – maeVeyable

+0

«Лучший» субъективен. Для простого кода просто убедитесь, что ваш код cpp имеет интерфейс C (extern «C») и использует ctypes. Просто посмотрите официальные документы для ctypes. – Jagoly

ответ

0

Поскольку я в конце концов решил его использовать часть предоставленной здесь помощи и исследования, позвольте мне опубликовать ответ.

Я сделал импорт функции CPP через Python с помощью Cython.

Cython обертывает код Python с CPP-файлом и скомпилирует их. Результатом является модуль Python (имя модуля можно указать в файле setup.py), и модуль можно вызвать как обычно.

Проблемы я столкнулся звал функцию CPP от Python.So вот мои советы по работе его

1.Define вашей функции в заголовке C++ и CPP файл.

2.Using CDEF, определить функцию в сценарии Python в начале, когда вы импортируете модули определяют другое определение variables.This аналогично определения заголовочного файла C++

3.While Пазинг аргументов и массивы в вызов функции из python, убедитесь, что все переменные и массивы являются типами, отлитыми как CPP, 4. Для массивов это немного сложно. Например, двойной массив в Python может быть лидирован по типу с использованием array.array, как показано ниже. DEV является AЩелкни двойной массив в питон здесь

cdef array.array dev_arr = array.array('d',dev) 

При прохождении этого массива к основной функции CPP вы должны указать этот массив: data.as_doubles

fn_response = cpp_fn_call(stddev_arr.data.as_doubles,...) 

Rest будет работать гладко.

1

См. this part документации Cython; он позволяет вам шаг за шагом взаимодействовать с библиотекой C.

Смежные вопросы