我尝试过替换
PyRun_SimpleString("import Pootle");
与
PyObject *obj = PyString_FromString("Pootle");
PyImport_Import(obj);
Py_DECREF(obj);
在一些 C 代码中初始化 Pootle 模块之后。第一个似乎使名称 Pootle
可用于后续 PyRun_SimpleString
调用,但第二个则不然。
有人可以向我解释一下其中的区别吗?有没有办法完成第一个 C API 调用的操作?
谢谢
最佳答案
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);
关于python - PyImport_Import 与导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878439/