Иногда при работе над проектом на 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. Пусть в нашей библиотеке будет одна функция
который возьмет строку и вернет ее длину, умноженную на 2. Заголовочный файл фу.int foo(char*);
ч может выглядеть так, например: #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
-
Выпущен Voyage Linux 0.7.5
19 Oct, 24 -
Как Развивалось Тестирование Covid
19 Oct, 24 -
Firebug 1.4.2 - Теперь На Русском Языке!
19 Oct, 24 -
Требования К Функционалу Игры
19 Oct, 24