Другие инструменты создания расширений Python

drugie instrumenty sozdaniya rasshirenij python Интеграция Python/C

В заключение темы создания расширений я должен упомянуть о существовании других инструментов, кроме SWIG, многие из которых имеют своих сторонников. В этом разделе будут представлены некоторые наиболее популярные инструменты в этой области. Как обычно, дополнительную информацию по этой и другим темам ищите в Сети. Подобно SWIG все перечисленные ниже инструменты начинали свою жизнь как сторонние программные компоненты, устанавливаемые отдельно. Однако в версии Python 2.5 расширение ctypes было включено в состав стандартной библиотеки.

SIP

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

Во многом подобно SWIG генератор программного кода обрабатывает комплект файлов спецификаций и генерирует программный код на языке C или C++, из которого потом путем компиляции создаются модули расширений. Модуль поддержки SIP для Python предоставляет функции, позволяющие автоматически генерировать программный код. В отличие от SWIG, система SIP изначально проектировалась исключительно для интеграции языков Python и C/C++. Система SWIG, в свою очередь, способна генерировать обертки для множества других языков сценариев и потому может рассматриваться, как более сложный проект.

ctypes

Система ctypes — это модуль интерфейса доступа к внешним функциям (Foreign Function Interface, FFI) для Python. Он позволяет сценариям Python обращаться к компилированным функциям в двоичных файлах библиотек непосредственно и динамически, для чего не требуется генерировать или писать интегрирующую обертку на языке C, с которыми мы познакомились в этой главе, а достаточно написать соответствующий программный код на самом языке Python. То есть связующий программный код для доступа к библиотеке пишется исключительно на языке Python, а не на C. Главное преимущество такого подхода состоит в том, что вам не требуется программировать на языке C или использовать систему сборки программ на языке C, чтобы получить доступ к функциям C из сценария Python. Один из недостатков заключается в возможной потере скорости на этапе маршрутизации вызовов, что, впрочем, зависит от применяемых способов измерений.

Согласно документации система ctypes позволяет сценариям Python вызывать функции, экспортируемые динамическими (DLL) и разделяемыми библиотеками, и содержит инструменты, дающие возможность создавать, получать и изменять данные сложных типов C на языке Python. Кроме того, предусматривается возможность создания на языке Python функций обратного вызова, которые будут вызываться из программного кода C, а экспериментальный генератор программного кода в ctypes позволяет автоматически создавать обертки для библиотек из заголовочных файлов C. Система ctypes работает в Windows, Mac OS X, Linux, Solaris, FreeBSD и OpenBSD. Она может использоваться и в других системах, поддерживающих пакет libffi. Версия ctypes для Windows включает пакет ctypes.com, который дает возможность программному коду Python вызывать и создавать собственные интерфейсы COM. Более подробную информацию о функциональных возможностях системы ctypes, включенной в состав стандартной библиотеки, ищите в руководствах по библиотеке Python.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий