![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
есть пара файлов на питоне *.py
надо их автоматом перевести на с++ или же собрать библиотеку или длл чтобы можно было из с++ вызывать. там подключаются следующие модули
возможно ли? |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Можно заюзать boost::python или просто в C коде создать интерпретатор питона и выполнять скрипты...
-------------------- ![]() |
|||
|
||||
mrgloom |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
это для выполнения участков кода? а можно подключать питоновые библиотеки? интерпретатор нужно с собой таскать?
имеется ввиду самописный интерпретатор? |
||||
|
|||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
а с помощью py2exe нельзя сделать dll?
|
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
http://docs.python.org/extending/embedding.html
вот нашел, но я не понял с программой надо все таки таскать интерпретатор в таком случае или нет? |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
||||
|
||||
mrgloom |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну по-моему это бред, зачем писать парсер+библиотеки, если питон как бы уже имеет среду выполнения. там(выше в постах) вроде бы есть методы как вызывать код питона из кода с++, но для меня остался открытым вопрос нужно ли будет устанавливать интерпретатор питона на машине на которой будет запускаться программа? или например можно как то "вложить" это сразу всё в код, я хочу статическую линковку, т.е. на выходе только 1 .exe. или например надо за собой таскать что то навроде python27.dll или подключать python27.lib? так же не очень понятно как использовать уже готовый код на питоне, ну вот у меня допустим есть 2 .py файла, которые писал не я, но я хочу использовать код который там, там есть import'ы (вроде бы стандартные), но меня все равно это смущает, т.к. т.к. это потянется все в код, как я пониаю? потом там есть классы и функции не понятно как это привязать к классам и функциям на с++. т.е. в идеале я вообще хотел бы так с++ код
т.е. чтобы весь этот питон код был скрыт от меня и лучше бы наверно в отдельную библиотеку. |
||||
|
|||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Свой интерпретатор ИМХО писать не надо, достаточно прилинковаться к питоновской билиотеке, не уверен что стандартные питоновские либы просто так заработают, скорее всего придется какие-то файлы питона за собой тянуть...
-------------------- ![]() |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
http://docs.python.org/release/2.5.2/ext/callingPython.html
http://www.codeproject.com/Articles/11805/...n-in-C-C-Part-I http://www.codeproject.com/Articles/11843/...-in-C-C-Part-II вот еще какие-то методы, но все вышеперечисленные вопрсы они не разъяснили. пока попробую shedskin может получится просто перегнать код в с++ UPD: shedskin лажа полная, там столько ограничений, что только головная боль. Это сообщение отредактировал(а) mrgloom - 27.4.2012, 12:11 |
|||
|
||||
mrgloom |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ладно давайте вообще рассмотрим самый простой пример
как мне вызвать этот код? из с++? т.е. я должен получить что то типа
|
||||
|
|||||
rsm |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
Парсер писать не надо. Надо будет линковать к своей программе библиотеку Python. Т.е. по сути получится тот же самый интерпретатор, только без интерактивного режима и выполняющий только одну конкретную задачу.
Можно слинковать библиотеку Python статически. Тогда получится один бинарник (интерпретатор), которые будет выполнять передаваемые ему в качестве аргументов (или как-то ещё) скрипты.
Как-то так (исходники примера в аттаче).
Это самый примитивнейший вариант, из которого выпилены все проверки результатов вызовов функций и весь код по освобождению занятой памяти. В нормальном варианте всё должно проверяться и память - освобождаться. И тем не менее, как бы глупо это ни звучало, это вполне полноценный интерпретатор Python. Это сообщение отредактировал(а) rsm - 28.4.2012, 03:26 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
||||||||
|
|||||||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
все таки я не очень понял про что вы. это присоединить к проекту на с++ исходный код интерпретатора? так вспомогательные функции (которые лежат в папке Lib) опять же написаны на питоне. насчет кода , в итоге я так и сделал, только мне приходится таскать с собой python27.dll, необходимые файлы .py из Lib и свои .py файлы из которых я вызываю функцию, в принципе и так можно, но хотелось бы все это запаковать в один .exe файл. |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
||||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
пытаюсь вызвать так. кстати так получается вызывать только функции, а как вызывать метод класса?
Это сообщение отредактировал(а) mrgloom - 5.5.2012, 16:22 |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
Для этого сначала нужно создать класс! © К.О. Вот прекрасный, очень маленький и очень простой биндинг к ALSA - там и классы, и callback, и даже python egg ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |