我试着替换

PyRun_SimpleString("import Pootle");

具有
PyObject *obj = PyString_FromString("Pootle");
PyImport_Import(obj);
Py_DECREF(obj);

在某些C代码中初始化模块后。第一个似乎使名称Pootle对随后的PyRun_SimpleString调用可用,但第二个不可用。
有人能给我解释一下区别吗?有没有一种方法可以像第一种方法那样处理C API调用?
谢谢

最佳答案

所有的PyImport_Import调用所做的就是返回对模块的引用——它不会使这样的引用对程序的其他部分可用。因此,如果希望PyRun_SimpleString看到新导入的模块,则需要手动添加它。
PyRun_SimpleString__main__模块命名空间中自动工作。不太注意错误检查(注意空返回!),这是一个概述:

PyObject *main = PyImport_AddModule("__main__");
PyObject *obj = PyString_FromString("Pootle");
PyObject *pootle = PyImport_Import(obj);
PyObject_SetAttrString(main, "Pootle", pootle);

Py_DECREF(obj);
Py_XDECREF(pootle);

关于python - PyImport_Import与导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/878439/

10-10 20:14