Comments 12
А что тогда понимается под фактическим встраиванием? Чем этот подход по своей сути отличается от того, что предлагает стандартный механизм или Boost::Python? Питоновский код всё так же исполняется в интерпретаторе, просто вместо вот этого:
Думаю, отлаживать такой питоновский код становится не очень удобно из-за всей этой обвязки с импортом модуля расширения. В доке даже есть раздел об этом.
Хотя идея мне, вообще, нравится. Всё это, например, можно было бы использовать в приложении с плагинами.
Используя API CPython, вы должны были бы запустить интерпретатор и выполнить множество преобразований параметров и возвращаемого значения.используется обёртка в виде динамической библиотеки, в которой всё это под капотом.
Думаю, отлаживать такой питоновский код становится не очень удобно из-за всей этой обвязки с импортом модуля расширения. В доке даже есть раздел об этом.
Хотя идея мне, вообще, нравится. Всё это, например, можно было бы использовать в приложении с плагинами.
Если очень нужно, то допилить встраивание именно до такого варианта с помощью C’шного препроцессора и простого скрипта на том же Python, который будет вырезать код на Python во временный файл и запускать создание библиотеки, несложно. А вот сделать код, который создаёт такие библиотеки сложнее.
Хотя пока такой скрипт не приведён название всё же стоит изменить на «создание разделяемых библиотек на Python».
Есть примеры, где это может понадобиться? Обычно нужно обратное — пишется ядро на C или C++ и используется в Python-приложении.
На вскидку, скриптование в игре. Да и вообще везде, где надо программировать логику без перекомпиляции.
Мы использовали Python-плагины в некотором околонаучном софте, который был написан на C++. Система плагинов была разработана так, чтобы можно было писать плагины и на C++ и на Python. Это очень удобно для проверки и обкатки каких-то новых алгоритмов/концепций/методов, связанных с предметной областью. Сначала пишется прототип на Python, подключается в виде плагина, алгоритм отлаживается, дорабатывается. Когда всё готово, делается реализация на C++, и плагин на Python заменяется плагином на C++ с тем же интерфейсом.
Какие ограничения по использованию питоновских модулей с помощью такого импорта?
Прошу уточнить вопросы технического плана:
1) gcc вместо Clang отаботает также, с теми же параметрами? Ни разу с Clang работать не приходилось.
2) Указано что *.dylib — динамическая библиотека, но в примере указан вариант с включением файла в конечный исполняемый файл. Поправьте, если это не так. Вопрос — это на самом деле динамическая библиотека, то что в Linux часто имеет шаблон libNamelibrary.so?
1) gcc вместо Clang отаботает также, с теми же параметрами? Ни разу с Clang работать не приходилось.
2) Указано что *.dylib — динамическая библиотека, но в примере указан вариант с включением файла в конечный исполняемый файл. Поправьте, если это не так. Вопрос — это на самом деле динамическая библиотека, то что в Linux часто имеет шаблон libNamelibrary.so?
Sign up to leave a comment.
Встраивание PyPy кода в приложения на C