Найти - Пользователи
Полная версия: boost.python import
Начало » Python для новичков » boost.python import
1
miksayer
Использую 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, но если к моему скрипту автоматически подключались нужные мне библиотеки(я их буду указывать в коде программы на С++)
ЗЗЫ сор, если не в тот раздел запостил
Андрей Светлов
Нужно
1. Инициалицировать python Py_Initialize()
2. Сделать __main__ module (хотя бы пустой)

Далее замечание не совсем по теме.
После многолетнего использования boost.python пришло понимание, что нужно делать C extensions, которые отлично живут в обычном питоне. Т.е. extending и никак не embedding.
На заключительном этапе разработки все это счастье заворачивается py2exe или самописным запускачом.
Вариант с изначальным embedding труднее (медленней) писать и значительно трудней отлаживать. И вообще количество питоновского кода превосходит объем плюсов как минимум в пять раз (это для проектов с интенсивным использованием C++, чаще - больше).
Все что можно пишется на питоне. На С++ пишется то, что на питоне сделать нельзя.
miksayer
Андрей Светлов, спасибо за ответ
но мне нужен именно embedding, т.к. мне необходимо в С++-щной программе подключение пользовательских скриптов(т.е. выполнение их в определенный момент)
Сделать __main__ module (хотя бы пустой)
а как это сделать?
bw
Передо мной, кстати, такая же задача стоит, которую придется решать в ближайшем будущем.
Так что буду с интересом следить за веткой :-).
Раньше я её с успехом решал имея на руках компилятор Pascal (FreePascal, Delphi) и API CPython, но с boost еще не работал, да и по C++ опыт маленький.

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

..bw
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