来自 PyModule_Create 的模块不能被 PyRun_SimpleStrings 访问

问题描述

我正在尝试编写一些 Python-C++ 代码。我在C++代码中定义了一个名为hw的模块,使用PyModule_CreatePyObject_CallNoArgs可以成功加载和调用。但是在下面的代码中,PyRun_SimpleString("hw.hw") 抱怨 NameError: name 'hw' is not defined。为什么会发生这种情况? PyModule_Create 不会将模块 hw 导入解释器吗?如果没有,我如何编写 C++ 代码以使模块 hw 可用于解释器 (PyRun_SimpleString)? (出于技术原因,我们不能将 hw 放在单独的 .c 文件中来为 import hw 之类的东西生成 .so)。

非常感谢您的帮助!

#include <Python.h>
#include <cstdio>

static PyObject *hw(PyObject *self){
   printf("Hello World!\n");
   Py_RETURN_NONE;
}

static PyMethodDef hwMethods[] = {
  {"hw",(PyCFunction) hw,METH_VaraRGS },{NULL,NULL}
};

static struct PyModuleDef hwDef = {
    PyModuleDef_HEAD_INIT,"hw",NULL,-1,// global state,no sub-interpreters
    hwMethods,NULL 
};

int main(int argc,char *argv[])
{   
    Py_Initialize();
    PyImport_AddModule("__main__"); 
    PyObject *pModule = PyModule_Create(&hwDef);    
    
    PyObject* pFunc = PyObject_GetAttrString(pModule,"hw");
    PyObject_CallNoArgs(pFunc); // Succeed.
    
    PyRun_SimpleString("hw.hw()");// Fail!
    
    Py_Finalize();
    return 0;
}

输出

Hello World!
Traceback (most recent call last):
  File "<string>",line 1,in <module>
NameError: name 'hw' is not defined

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)