pybind11 (версия 3) — Безшовная совместимость между C++ и Python
|Статус последней документации| |Статус документации версии Stable|
|Обсуждения GitHub|
Пример использования Setuptools • Пример использования Scikit-build • Пример использования CMake
pybind11 — это легковесная библиотека с заголовочными файлами, которая позволяет экспортировать типы C++ в Python и наоборот, главным образом для создания Python-обвязок существующего C++ кода. Её цели и синтаксис аналогичны замечательной библиотеке Boost.Python Дэвида Абрахамса: минимизация шаблонного кода в традиционных модулях расширения путём вывода информации о типах при компиляции.
Основная проблема с Boost.Python и причиной создания такой похожей библиотеки — это Boost. Boost — это огромный и сложный набор утилитарных библиотек, который работает с почти каждым существующим компилятором C++. Эта совместимость имеет свою цену: необходимы арканиумные трюки с шаблонами и временные меры для поддержки самых старых и багоносных компиляторов. Теперь, когда компиляторы, поддерживающие C++11, широко доступны, эта тяжелая машина стала излишне большой и ненужной зависимостью.Рассмотрите эту библиотеку как компактную версию Boost.Python с минимальным количеством необходимого кода для генерации обвязок. Без комментариев основные заголовочные файлы требуют всего около 4К строк кода и зависят от Python (CPython 3.8+, PyPy или GraalPy) и стандартной библиотеки C++. Такое компактное исполнение стало возможным благодаря некоторым возможностям языка C++11 (в частности: кортежи, лямбда-функции и вариативные шаблоны). С момента создания эта библиотека превзошла Boost.Python во многих аспектах, что привело к значительно более простому коду обвязок в большинстве распространённых ситуаций.
Учебник и справочная документация доступны по адресу pybind11.readthedocs.io. PDF-версия руководства доступна здесь. И исходный код всегда доступен по адресу github.com/pybind/pybind11.
pybind11 может отображать следующие основные возможности C++ в Python:- Функции, принимающие и возвращающие пользовательские данные структуры по значению, ссылке или указателю
- Экземплярные методы и статические методы
- Перегруженные функции
- Экземплярные атрибуты и статические атрибуты
- Произвольные типы исключений
- Перечисления
- Коллбэки
- Итераторы и диапазоны
- Пользовательские операторы
- Одиночное и множественное наследование
- STL структуры данных
- Умные указатели с подсчетом ссылок, такие как std::shared_ptr
- Внутренние ссылки с правильным подсчетом ссылок
- C++ классы с виртуальными (и чисто виртуальными) методами могут быть расширены в Python
- Интегрированная поддержка NumPy (NumPy 2 требует pybind11 2.12+)Дополнительные возможности
--------------------------
Кроме основных функциональностей, pybind11 предоставляет некоторые дополнительные возможности:
constexpr
), что приводит к более компактным бинарникам. - С небольшими дополнительными усилиями типы C++ могут быть сериализованы и десериализованы аналогично обычным объектам Python.Этот проект был создан Wenzel Jakob. Значительные функции и/или улучшения кода были внесены Jonas Adler, Lori A. Burns, Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov, Johan Mabille, Tomasz Miąsko, Dean Moldovan, Ben Pritchard, Jason Rhinelander, Boris Schäling, Pim Schellart, Henry Schreiner, Ivan Smirnov, Dustin Spicuzza, Boris Staletic, Ethan Steinberg, Patrick Stewart, Ivor Wanders и Xiaofei Wang.
Мы благодарим Google за щедрую финансовую помощь в инфраструктуре непрерывной интеграции, используемой этим проектом.
pybind11 предоставляется под лицензией типа BSD, которая может быть найдена в файле LICENSE. Используя, распространяя или участвуя в этом проекте, вы соглашаетесь с условиями этой лицензии...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )