在C++项目中调用python时碰到了个特别坑(我的沙雕错误)的地方。
在项目中调用python要用到
PyObject *pName = PyUnicode_DecodeFSDefault("detect_model");
PyObject *pModule = PyImport_Import(pName); /* 导入模块 */
if (pModule == NULL)
{
cout << "没找到" << endl;
}
来导入python模块文件,但是一直出现 PyObject *pModule = NULL
的情况,参考网上各种改环境/设置路径都没有用,在python环境下运行该模块也没问题,折磨了一天最后终于发现了问题:
在我的detect_model.py文件中 import了其它文件夹中的py文件,比如:from utils.utils import *
,这里就是最大的坑!!!
我的utils文件目录是这样的:
├─utils
│ └─__pycache__
│ └─utils.py
│ └─datasets.py
发现每次运行到from utils.utils import *
就会出现PyObject *pModule = NULL
最后终于发现,在我的python环境中的site_package文件夹下也有一个utils文件夹!,大概率是因为每次import的时候python是在这里来找utils.py的,找不到就会出错,然后模型就无法导入。。。
最后把我的python项目文件夹名字改为
├─my_utils
│ └─__pycache__
│ └─my_utils.py
│ └─datasets.py
同时修改各个py文件中import utils改为对应的my_utils就好了。。。。
得到教训:命名的时候最好还是别用这种常用词命名了,至少加个my之类的
命名不规范,日后两行泪 555555