PyImport_Import在python模块中导入子模块时失败

Shubhadeep das

我有这样的CPP代码:

void callPython() {
    Py_Initialize();    
    PyObject* sysPath = PySys_GetObject("path");
    PyList_Append(sysPath, PyUnicode_FromString("/jarvis_repo/src/cpp/packages/jarvis/nlp/"));
    // Load the module
    PyObject *pName = PyUnicode_FromString("my_mod");
    PyObject *pModule = PyImport_Import(pName);
    if (pModule != NULL) {
        std::cout << "Python module found\n";       

        PyObject* pFunc = PyObject_GetAttrString(pModule, "my_func");
        if(pFunc != NULL){
            PyObject_CallObject(pFunc, NULL);
        } else {
            std::cout << "Couldn't find func\n";
        }
    }
    else {
        PyErr_Print();
        std::cout << "Python Module not found\n";
}     
    Py_Finalize();
}

我在同一目录中还有两个文件my_mod.py和test.py,/jarvis_repo/src/cpp/packages/jarvis/nlp/如下所示:

my_mod.py

from test import coreDM
def my_func():
    print("my_func() got called")
    coreDM()

test.py

class coreDM():
    def __init__(self):
        print("Initialized test")

    def print_message():
        print("Hello from coreDM")

from test import coreDMcoreDM()从省略my_mod.pyPyImport_Import工作正常,并打印my_func() got called,否则返回NULL。任何想法为什么会发生这种情况?提前致谢!

错误信息:

ImportError: cannot import name 'coreDM'
Python Module not found
Szabolcs Dombi

用于PyList_Insert代替PyList_Append从所需位置导入测试。

正如@DavidW提到的那样,核心库中有一个名为的可导入模块test

更改

PyList_Append(sysPath, PyUnicode_FromString("/jarvis_repo/src/cpp/packages/jarvis/nlp/"));

PyList_Insert(sysPath, 0, PyUnicode_FromString("/jarvis_repo/src/cpp/packages/jarvis/nlp/"));

因此该test模块首先在/ jarvis_repo / src / cpp / packages / jarvis / nlp /中找到,而不是在核心库中找到。

注意:您应该重命名test,而不是

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章