我有这样的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 coreDM
与coreDM()
从省略my_mod.py
,PyImport_Import工作正常,并打印my_func() got called
,否则返回NULL。任何想法为什么会发生这种情况?提前致谢!
错误信息:
ImportError: cannot import name 'coreDM'
Python Module not found
用于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] 删除。
我来说两句