Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2009 23:58:36

miksayer
От:
Зарегистрирован: 2009-02-17
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

boost.python import

Использую boost.python пару часов, а уже возникла куча проблем. Я хочу запустить такой скрипт из файла:

from sys import version

print 'Hello World !'
number = 42
print number
print sys.version
но выдается ошибка:
File "script.py", line 5, in <module>
from sys import version
ImportError: __import__ not found
т.е. он как я понимаю ругается на import
я использую такую процедуру из бустовского примера, чтобы запускать скрипты:
void exec_file_test(std::string const &script)
{
std::cout << "running file " << script << "..." << std::endl;

// Run a python script in an empty environment.
python::dict global;

python::object result = python::exec_file(script.c_str(), global, global);

// Extract an object the script stored in the global dictionary.
BOOST_TEST(python::extract<int>(global["number"]) == 42);

std::cout << "success!" << std::endl;
}
Что мне сделать, чтобы не было ругани на import?
ЗЫ если это важно: в принципе могу обойтись без import, но если к моему скрипту автоматически подключались нужные мне библиотеки(я их буду указывать в коде программы на С++)
ЗЗЫ сор, если не в тот раздел запостил



Офлайн

#2 Июнь 4, 2009 16:40:16

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

boost.python import

Нужно
1. Инициалицировать python Py_Initialize()
2. Сделать __main__ module (хотя бы пустой)

Далее замечание не совсем по теме.
После многолетнего использования boost.python пришло понимание, что нужно делать C extensions, которые отлично живут в обычном питоне. Т.е. extending и никак не embedding.
На заключительном этапе разработки все это счастье заворачивается py2exe или самописным запускачом.
Вариант с изначальным embedding труднее (медленней) писать и значительно трудней отлаживать. И вообще количество питоновского кода превосходит объем плюсов как минимум в пять раз (это для проектов с интенсивным использованием C++, чаще - больше).
Все что можно пишется на питоне. На С++ пишется то, что на питоне сделать нельзя.



Офлайн

#3 Июнь 4, 2009 21:31:33

miksayer
От:
Зарегистрирован: 2009-02-17
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

boost.python import

Андрей Светлов, спасибо за ответ
но мне нужен именно embedding, т.к. мне необходимо в С++-щной программе подключение пользовательских скриптов(т.е. выполнение их в определенный момент)
Сделать __main__ module (хотя бы пустой)
а как это сделать?



Офлайн

#4 Июнь 4, 2009 22:22:55

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

boost.python import

Передо мной, кстати, такая же задача стоит, которую придется решать в ближайшем будущем.
Так что буду с интересом следить за веткой :-).
Раньше я её с успехом решал имея на руках компилятор Pascal (FreePascal, Delphi) и API CPython, но с boost еще не работал, да и по C++ опыт маленький.

..bw



Офлайн

#5 Июнь 4, 2009 22:46:47

miksayer
От:
Зарегистрирован: 2009-02-17
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

boost.python import

bw
а API CPython разве не только под С\C++?



Отредактировано (Июнь 4, 2009 23:00:49)

Офлайн

#6 Июнь 5, 2009 00:04:45

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

boost.python import

Свет клином на C/++ не сошелся :-). API к интерпретатору Python, заключённому в динамическую библиотеку, либо исполненному как статический код, везде одинаковый. Хоть D, хоть ctypes используй.
Но это уже offtopic.

..bw



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version