PyImport_Import vs import

时间:2009-05-18 15:56:28

标签: python c import

我试图替换

PyRun_SimpleString("import Pootle");

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

在一些C代码中初始化模块Pootle之后。第一个似乎使名称Pootle可用于后续的PyRun_SimpleString次调用,但第二次没有。

有人可以向我解释一下这个区别吗?有没有办法做第一个C API调用的工作?

由于

1 个答案:

答案 0 :(得分:3)

所有PyImport_Import调用都返回对模块的引用 - 它不会使这样的引用可用于程序的其他部分。因此,如果您希望PyRun_SimpleString看到新导入的模块,则需要手动添加。

PyRun_SimpleString__main__模块命名空间中自动运行。没有注意错误检查(警惕NULL返回!),这是一个大致的概述:

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);