Я использую boost :: python для создания гибридного приложения C++/python: приложение C++ вызывает набор скриптов python, которые, в свою очередь, используют функции, классы и т. Д. Программы C++, которые отображаются как объекты python. (Python 2.x.)boost :: python hybrid embedding/exposing: как я могу получить globals() и увидеть мой собственный модуль?
BOOST_PYTHON_MODULE(MyModule)
предоставляет C++ для python, как ожидалось.
Мой код инициализации:
Py_Initialize();
initMyModule(); // import MyModule
namespace bpl = boost::python;
Теперь я хочу, чтобы мой код C++, чтобы получить в MyModule
тоже. В python вы просто пишете globals()['MyModule']
. Но это (и все подобные ему) не работают в C++:
bpl::object globals = bpl::eval("globals()");
Это терпит неудачу во время выполнения с
File "<string>", line 1, in <module>; NameError: name 'globals' is not defined
Как и в сторону, я вижу много примеров от __main__
:
bpl::object m = bpl::import("__main__");
bpl::dict g = m.attr("__dict__"); // like locals(), but not globals()
Это не fail, и дает locals, но согласно Py_Initialize docs, __main__
уже установлено. И это не позволяет вам видеть глобальные переменные, где вы найдете свой импортированный модуль.