1. PyImport_ImportModule()返回NULL
首先排查是否设置对了路径。
然后在后面加入语句,PyErr_Print(),这样python出现的错误就会在eclipse的控制台打印出来。非常有用。
我的问题出在import tensorflow这个语句中出现了,错误信息是:
'module' object has no attribute 'argv'
原因是:
tensorflow需要给程序传入命令行参数。
所以保证python文件有接收argv参数的main函数:
def main(argv=None):
然后在C++中加入传递参数的语句,以及给python设置程序的语句,设置程序的语句在初始化之前,传参要在之后:
这样就可以调用含有tensorflow库的python文件了。
2.第二个问题,我的程序的python部分的功能是用训练好的模型来预测c++产生的图片,调用python是在循环中多次调用。
发现第一次运行无误,第二次PyImport_ImportModule()直接报错退出,NULL都不返回。
解决方法是,将初始化传参以及设置系统路径的语句和Finalize语句放到循环外
3.第三个问题,终于可以运行后,python本身出现问题,依旧是第一次可以运行,第二次报错:
提示我网络的变量已经存在(应该是第一次运行的时候生成的):
解决方法是,在python结束前加入语句:
tf.reset_default_graph 释放掉网络