【问题标题】:PyImport_Import vs importPyImport_Import 与导入
【发布时间】:2009-05-18 15:56:27
【问题描述】:

我已经尝试过替换

PyRun_SimpleString("import Pootle");

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

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

有人可以向我解释一下区别吗?有没有办法做第一个对 C API 调用所做的事情?

谢谢

【问题讨论】:

    标签: python c import


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 2020-05-21
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多