python - PyImport_Import 与导入

标签 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 调用的操作?

谢谢

最佳答案

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/

相关文章:

python - 使用邻域和对 3D 数组进行子采样

c - 如何检查 vsdo 变量?

php - Magento 产品图片未显示在管理中

python - 如何在 python spyder IDE 中使用相对导入

python - 如何测试 Pandas 数据框字符串列中的哪个单元格包含给定引用字符串的子字符串?

python - Windows 10 上的 Kivy。当 kivy 应用程序未获得焦点时,如何单击按钮?

python - 从整数列表创建索引字典

c++ - 解析 C 头文件

c - 你如何使用正则表达式捕获一个组?

c - 在 C 中导入 bash 模块