Я пытаюсь подключить модуль расширения от 2.7 до 3.5. Модуль расширения использует PyEval_EvalCode
. Он делает это с некоторым кодом, аналогичным следующему:Использование PyEval_EvalCode в Python 3.5
struct _node *compiled_node = PyParser_SimpleParseString (in_string, Py_file_input);
if (compiled_node)
{
PyCodeObject *compiled_code = PyNode_Compile (compiled_node, "temp.py");
if (compiled_code)
{
return_value.Reset(PyEval_EvalCode (compiled_code, globals.get(), locals.get()));
}
}
В Python 2.7 это отлично работает. В Python 3.5 я получаю сбой компиляции, потому что PyNode_Compile
возвращает PyCodeObject
, но в Python 3.5 PyEval_EvalCode
принимает a PyObject*
. Что мне нужно сделать, чтобы преобразовать это в PyObject
, который я могу передать на PyEval_EvalCode
?
Спасибо, это странно, что они решили, что 'PyNode_Compile' возвращает' PyCodeObject' вместо 'PyObject', как это делают все остальные методы. Это бросило меня в петлю. –