我试着替换
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/