Я использую boost :: python для встраивания кода python в приложение. Я смог получить правильные вычисления операторов печати или других выражений, но когда я пытаюсь импортировать модули, это не импорт, а приложение выходит. Кроме того, вызов функции globals() во встроенном коде также приводит к ошибке выполнения.Как импортировать модули в boost :: python встроенный код python?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
Здесь я пытался импортировать urllib2, используя функцию импорта наддува, это компилируется и работает нормально, но со следующим ехес заявление, он дает ошибку.
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
Или когда я удаляю функцию импорта boost и выполняю импорт из встроенного кода, он дает ошибку. Я попытался использовать try: except: block, но это тоже не работает. Это потому, что приложение C++ не может найти расположение модуля urllib2 py или что-то еще? Есть ли способ установить путь к модулю перед попыткой импорта?
Это строится только для внутреннего использования, поэтому допустимо некоторая жесткая кодировка путей.
Редактировать: More info:
Это то, что происходит. Я сделал попытку .. поймал и назвал PyErr_Print(), когда когда-либо было исключение, и получил это как ошибку все время, когда есть импорт модулей или даже вызовы функций. Сообщение об ошибке:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
Может ли кто-нибудь подумать о какой-либо причине?
Рад, что вы получили ваш код работает. Что вы хотите с этим делать? –
Ох. Я был полностью болен библиотеками сокетов C++. Им нужно время, чтобы понять, и, поскольку я не студент компьютеров, я занимаю больше времени, чтобы понять. Поэтому я создал нечто похожее на асинхронный urllib ++ с python urllib2 в спину. : D Я знаю, это звучит безумно. Но у меня сейчас очень удобное решение! – Sahas
Хе-хе, хорошо для вас! –