Найти - Пользователи
Полная версия: Использование языка Python в С/С++, простой пример
Начало » Python для экспертов » Использование языка Python в С/С++, простой пример
1 2 3
agalen
Обратная связь там (в pyrex и Cython) делается с помощью ключевого слова “api”. Пример есть в документации
Андрей Светлов
agalen, вопрос в лоб: разницу между extending и embedding понимаете?
Или имеете исключительно “теоретическое” знакомство с предметом?
agalen
Я как раз имел ввиду, что Cython помогает только делать не только extending, но и embedding.
Конечно, все зависит от задачи, но в некоторых случаях может быть полезен.
Например, сделать сишный интерфейс к питоновским функциям, чтобы обойтись без вызова функций Python C API (кроме Py_Initialize() ).
Андрей Светлов
Cython всё таки делает pyd/so и ничего более — так что именно extending. То, что сам Питон можно при этом встроить в другую программу-процесс — ничего в положении вещей не меняет.
К тому же генерируемый *_api.h содержит именно С определения. Если этого достаточно — отлично. Для более или менее большой поделки — неудобно, всё же С++ имеет ряд преимуществ. Но это уже мелочи.
Aldegid
Меня тоже заинтересовала эта тема.

Запускал почти тот же пример, что и в первом посте, только когда пишу
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 );
с открытым file, то получаю краш.

Это все происходит в консольном приложении, созданным из мастера пустым. Использую MSVS 2008. Подскажите, как лечить.

И ещё, меня очень заинтересовало, но я не совсем понял про embedding и extending. Что есть что, что лучше использовать и как это делать?
Андрей Светлов
Ноль — нельзя вообще. Версия питона какая?
extending — написание модулей-расширений на всяких разных языках.
embedding — встраивание питона в другие процессы.
extending гораздо проще и удобней, при этом замечательно подходит почти для всех случаев (хоть поначалу это и неочевидно).
Rodegast
http://a-iv.ru/pyart/cpp2py.pdf
Aldegid
2Андрей Светлов
Я понял, значит мне нужен и extending и embedding.

Хочу на C++ писать программу, которая для исполнения некоторых функций использует Python, модули на котором в свою очередь используют объекты того самого экземпляра программы на C++, из которого были вызваны. Скажите, это можно реализовать? Если да, то как?

2Rodegast
SWIG? Понял. Но там только в одну сторону. А Boost вроде в обе. Хотя мне пока не удается побеждать Boost. Вообще что лучше SWIG или Boost?
Андрей Светлов
SWIG — это ночной кошмар

Не нужно писать “программу на С, которая вызывает питоновские функции”.
Нужно писать модуль, который управляется Питоном. Так проще и удобней, поверьте.
Aldegid
С большими мучениями кое-как добился вызова функции Python из C и вызова из первой обратно в то же C приложение!!! Безо всяких boost, cpython и прочих. Только с помощью API. Все работает, ура!!!
Копаем дальше… :)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB