pybind11 — Бесшовная работа между C++11 и Python
Пример инструментов настройки • Пример сборки Scikit • Пример CMake
pybind11 — это облегченная библиотека только для заголовков, которая предоставляет типы C++ в Python и наоборот, в основном для создания привязок Python к существующему коду C++. Ее цели и синтаксис аналогичны превосходной библиотеке Boost.Python Дэвида Абрахамса: минимизировать шаблонный код в традиционных модулях расширения путем вывода информации о типе с помощью самоанализа во время компиляции.
Основная проблема Boost.Python и причина создания подобного проекта — это Boost. Boost — это чрезвычайно большой и сложный набор служебных библиотек, который работает практически со всеми существующими компиляторами C++. У этой совместимости есть своя цена: для поддержки самых старых и самых ошибочных образцов компилятора необходимы хитрые шаблонные приемы и обходные пути. Теперь, когда C++11-совместимые компиляторы широко доступны, эта тяжелая техника стала чрезмерно большой и ненужной зависимостью.
Думайте об этой библиотеке как о крошечной автономной версии Boost.Python, в которой удалено все, что не имеет отношения к генерации привязок. Без комментариев основные файлы заголовков требуют всего около 4 000 строк кода и зависят от Python (3.8+ или PyPy) и стандартной библиотеки C++. Такая компактная реализация стала возможной благодаря некоторым возможностям языка C++11 (в частности, кортежам, лямбда-функциям и шаблонам с переменным числом вариантов). С момента своего создания эта библиотека во многом вышла за рамки Boost.Python, что привело к значительному упрощению кода привязки во многих распространенных ситуациях.
Учебную и справочную документацию можно найти по адресу pybind11.readthedocs.io. PDF-версия руководства доступна здесь. Исходный код всегда доступен по адресу github.com/pybind/pybind11.
pybind11 может сопоставить следующие основные функции C++ с Python:
std::shared_ptr
В дополнение к основным функциям pybind11 предоставляет некоторые дополнительные возможности:
constexpr
), что приводит к уменьшению двоичных файлов.Этот проект создал Венцель Якоб. Значительные функции и/или улучшения кода были внесены Йонасом Адлером, Лори А. Бернсом, Сильвеном Корли, Эриком Кузино, Аароном Гокасланом, Ральфом Гросс-Кунстлеве, Трентом Хулистоном, Акселем Хюблом, @hulucc, Янником Джадулом, Сергеем Лысковым, Йоханом. Мабилле, Томаш Мьонско, Дин Молдован, Бен Притчард, Джейсон Райнлендер, Борис Шелинг, Пим Шелларт, Генри Шрайнер, Иван Смирнов, Борис Сталетич и Патрик Стюарт.
Мы благодарим Google за щедрый финансовый вклад в инфраструктуру непрерывной интеграции, используемую в этом проекте.
См. руководство для получения информации о создании и участии в pybind11.
pybind11 предоставляется по лицензии BSD, которую можно найти в файле LICENSE. Используя, распространяя или внося свой вклад в этот проект, вы соглашаетесь с условиями этой лицензии.