gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:21:12 24 4
gpt4 key购买 nike

我有一个这样的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.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反而

关于python - 在 python 模块中导入子模块时 PyImport_Import 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com