Я делаю это с помощью огромной библиотеки C ++ в нашем продукте. Существует несколько инструментов, которые могут помочь вам автоматизировать задачу написания привязок: самый популярный из них - SWIG, который существует некоторое время, используется во многих проектах и в целом работает очень хорошо.
Самым большим аргументом против SWIG (на мой взгляд) является то, что кодовая база C ++ самого SWIG действительно, мягко говоря, довольно грубая. Он был написан до STL и имеет свою собственную полудинамическую систему типов, которая сейчас просто старая и скрипучая. Это не будет иметь большого значения, если вам когда-нибудь не придется застревать и вносить некоторые изменения в ядро (однажды я пытался добавить преобразование doxygen -> docstring), но если вы это сделаете, удачи вам! Люди также говорят, что код, сгенерированный SWIG, не так эффективен, что может быть правдой, но для меня я никогда не считал, что вызовы SWIG являются достаточным узким местом, чтобы беспокоиться об этом.
Есть и другие инструменты, которые вы можете использовать, если SWIG не поддерживает вашу лодку: boost.python также популярен и может быть хорошим вариантом, если вы уже используете библиотеки boost в своем коде C ++. Обратной стороной является то, что он требует много времени на компиляцию, так как он почти полностью основан на шаблоне C ++.
Оба эти инструмента требуют, чтобы вы заранее поработали, чтобы определить, что будет раскрыто и как это будет сделано. Для SWIG вы предоставляете файлы интерфейса, которые похожи на заголовки C ++, но урезаны, и с некоторыми дополнительными директивами, чтобы сообщить SWIG, как переводить сложные типы и т. Д. Написание этих интерфейсов может быть утомительным, поэтому вы можете посмотреть что-то вроде pygccxml, чтобы помочь вам автоматически сгенерировать их для вас.
Автор этого пакета на самом деле написал другое расширение, которое может вам понравиться: py ++. Этот пакет выполняет две функции: он может автоматически генерировать определения привязки, которые затем могут быть переданы в boost.python для создания привязок python: в основном это полное решение для большинства людей. Возможно, вы захотите начать с него, если у вас нет особых или сложных требований.
Некоторые другие вопросы, которые могут оказаться полезными в качестве справки:
Вы также можете найти это сравнение привязки инструменты для генерации Python удобны. Как отмечает Алекс в комментариях, сейчас он довольно старый, но, по крайней мере, дает вам некоторое представление о ландшафте ...
Что касается того, как управлять сборкой, вы можете захотеть взглянуть на более продвинутый встроенный инструмент, который distutils: если вы хотите придерживаться Python, я настоятельно рекомендую Waf в качестве основы (другие скажут вам SCons - правильный путь, но поверьте мне, он чертовски медленный: я уже был туда и обратно!) ... это требует небольшого обучения, но когда вы начинаете думать, это чрезвычайно мощно. И поскольку это чистый Python, он будет отлично интегрироваться с любым другим кодом Python, который у вас есть как часть процесса сборки (скажем, например, вы используете Py ++ в конце) ...
person
jkp
schedule
12.08.2009