Форум сайта python.su
Обратная связь там (в pyrex и Cython) делается с помощью ключевого слова “api”. Пример есть в документации
Офлайн
agalen, вопрос в лоб: разницу между extending и embedding понимаете?
Или имеете исключительно “теоретическое” знакомство с предметом?
Офлайн
Я как раз имел ввиду, что Cython помогает только делать не только extending, но и embedding.
Конечно, все зависит от задачи, но в некоторых случаях может быть полезен.
Например, сделать сишный интерфейс к питоновским функциям, чтобы обойтись без вызова функций Python C API (кроме Py_Initialize() ).
Отредактировано (Апрель 4, 2011 15:08:49)
Офлайн
Cython всё таки делает pyd/so и ничего более — так что именно extending. То, что сам Питон можно при этом встроить в другую программу-процесс — ничего в положении вещей не меняет.
К тому же генерируемый *_api.h содержит именно С определения. Если этого достаточно — отлично. Для более или менее большой поделки — неудобно, всё же С++ имеет ряд преимуществ. Но это уже мелочи.
Офлайн
Меня тоже заинтересовала эта тема.
Запускал почти тот же пример, что и в первом посте, только когда пишу
PyRun_SimpleFile( 0, filename );
File "d:\Projects\Thin Worlds\Temp\1 Flow Control Statements.py", line 1
\ufffd\ufffd
^
SyntaxError: invalid character in identifier
PyRun_SimpleFile( file, filename );
Офлайн
Ноль — нельзя вообще. Версия питона какая?
extending — написание модулей-расширений на всяких разных языках.
embedding — встраивание питона в другие процессы.
extending гораздо проще и удобней, при этом замечательно подходит почти для всех случаев (хоть поначалу это и неочевидно).
Офлайн
http://a-iv.ru/pyart/cpp2py.pdf
Офлайн
2Андрей Светлов
Я понял, значит мне нужен и extending и embedding.
Хочу на C++ писать программу, которая для исполнения некоторых функций использует Python, модули на котором в свою очередь используют объекты того самого экземпляра программы на C++, из которого были вызваны. Скажите, это можно реализовать? Если да, то как?
2Rodegast
SWIG? Понял. Но там только в одну сторону. А Boost вроде в обе. Хотя мне пока не удается побеждать Boost. Вообще что лучше SWIG или Boost?
Офлайн
SWIG — это ночной кошмар
Не нужно писать “программу на С, которая вызывает питоновские функции”.
Нужно писать модуль, который управляется Питоном. Так проще и удобней, поверьте.
Офлайн
С большими мучениями кое-как добился вызова функции Python из C и вызова из первой обратно в то же C приложение!!! Безо всяких boost, cpython и прочих. Только с помощью API. Все работает, ура!!!
Копаем дальше… :)))
Отредактировано (Июнь 21, 2011 03:09:26)
Офлайн