Уведомления

Группа в Telegram: присоединиться

#1 Апрель 4, 2011 10:29:49

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

Обратная связь там (в pyrex и Cython) делается с помощью ключевого слова “api”. Пример есть в документации



Офлайн

#2 Апрель 4, 2011 10:33:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

agalen, вопрос в лоб: разницу между extending и embedding понимаете?
Или имеете исключительно “теоретическое” знакомство с предметом?



Офлайн

#3 Апрель 4, 2011 15:08:12

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

Я как раз имел ввиду, что Cython помогает только делать не только extending, но и embedding.
Конечно, все зависит от задачи, но в некоторых случаях может быть полезен.
Например, сделать сишный интерфейс к питоновским функциям, чтобы обойтись без вызова функций Python C API (кроме Py_Initialize() ).



Отредактировано (Апрель 4, 2011 15:08:49)

Офлайн

#4 Апрель 4, 2011 16:05:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

Cython всё таки делает pyd/so и ничего более — так что именно extending. То, что сам Питон можно при этом встроить в другую программу-процесс — ничего в положении вещей не меняет.
К тому же генерируемый *_api.h содержит именно С определения. Если этого достаточно — отлично. Для более или менее большой поделки — неудобно, всё же С++ имеет ряд преимуществ. Но это уже мелочи.



Офлайн

#5 Июнь 12, 2011 22:54:50

Aldegid
От:
Зарегистрирован: 2011-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

Меня тоже заинтересовала эта тема.

Запускал почти тот же пример, что и в первом посте, только когда пишу

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. Что есть что, что лучше использовать и как это делать?



Офлайн

#6 Июнь 13, 2011 14:09:14

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

Ноль — нельзя вообще. Версия питона какая?
extending — написание модулей-расширений на всяких разных языках.
embedding — встраивание питона в другие процессы.
extending гораздо проще и удобней, при этом замечательно подходит почти для всех случаев (хоть поначалу это и неочевидно).



Офлайн

#7 Июнь 14, 2011 00:16:44

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2197
Репутация: +  154  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

http://a-iv.ru/pyart/cpp2py.pdf



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Июнь 14, 2011 11:01:06

Aldegid
От:
Зарегистрирован: 2011-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

2Андрей Светлов
Я понял, значит мне нужен и extending и embedding.

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

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



Офлайн

#9 Июнь 14, 2011 11:29:24

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование языка Python в С/С++, простой пример

SWIG — это ночной кошмар

Не нужно писать “программу на С, которая вызывает питоновские функции”.
Нужно писать модуль, который управляется Питоном. Так проще и удобней, поверьте.



Офлайн

#10 Июнь 21, 2011 03:08:35

Aldegid
От:
Зарегистрирован: 2011-06-12
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование языка Python в С/С++, простой пример

С большими мучениями кое-как добился вызова функции Python из C и вызова из первой обратно в то же C приложение!!! Безо всяких boost, cpython и прочих. Только с помощью API. Все работает, ура!!!
Копаем дальше… :)))



Отредактировано (Июнь 21, 2011 03:09:26)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version