Создание Оболочки Python Для Библиотек, Написанных На C/C++, С Использованием Sip. Часть 1

Иногда при работе над проектом на Python возникает желание использовать библиотеку, написанную не на Python, а, например, на C или C++.

Причины этого могут быть разными.

Во-первых, Python — замечательный язык, но в некоторых ситуациях он недостаточно быстр.

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

В этом случае мы также можем сделать Python-обертку над библиотекой и использовать ее, не задумываясь о том, что библиотека изначально написана не на Python. Существуют различные инструменты для создания привязок Python, начиная от низкоуровневых, таких как API Python/C и до более высоких уровней, таких как СВИГ И ГЛОТОК .

Моей целью было не сравнить разные способы создания привязок Python, а хотелось бы рассказать об основах использования одного инструмента, а именно ГЛОТОК .

Изначально SIP разрабатывался для создания привязки вокруг библиотеки Qt — PyQt , а также используется при разработке других крупных библиотек Python, например, wxPython .

В этой статье мы будем использовать gcc в качестве компилятора C и g++ в качестве компилятора C++.

Все примеры были протестированы под Arch Linux и Python 3.8. Чтобы примеры были простыми, тема компиляции для разных операционных систем и использования разных компиляторов (например, Visual Studio) выходит за рамки этой статьи.

Вы можете скачать все примеры для этой статьи с сайта репозиторий на github .

Репозиторий с исходниками SIP находится по адресу https://www.riverbankcomputing.com/hg/sip/ .

Mercurial используется в качестве системы контроля версий для SIP.



Делаем привязку над библиотекой на языке Си



Написание библиотеки на C

Этот пример находится в папке pyfoo_c_01 в исходном коде, но в этой статье мы будем считать, что делаем всё с нуля.

Начнем с простого примера.

Для начала мы создадим простую библиотеку C, которую затем запустим из скрипта Python. Пусть в нашей библиотеке будет одна функция

  
  
   

int foo(char*);

который возьмет строку и вернет ее длину, умноженную на 2. Заголовочный файл фу.

ч может выглядеть так, например:

#ifndef FOO_LIB #define FOO_LIB int foo(char* str); #endif

И файл реализации foo.cpp :

#include <string.h> #include "foo.h" int foo(char* str) {

Теги: #python #C++ #sip #привязки Python

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.