最近可能需要做一个项目,可能需要c++中调用python,在网上找了一些资料学习了一下。
然后在项目中添加一个python文件:
最后项目结构如下图所示:
qmake, 然后构建,最后运行
添加代码:
INCLUDEPATH +=E:\Users\Administrator\Anaconda3\envs\python3env\include ############# python enviroment LIBS += -LE:\Users\Administrator\Anaconda3\envs\python3env\libs\ -l_tkinter\ -lpython3\ -lpython36这里有几点需要说明一下:
这里E:\Users\Administrator\Anaconda3\envs\python3env\include和E:\Users\Administrator\Anaconda3\envs\python3env\libs\是我的python的路径,具体到个人的话需要自行修改的。姑且认为读者对这个应该比较熟悉了。另外这里的LIBS中-L和E:\Users\Administrator\Anaconda3\envs\python3env\libs\ 中间不能打空格!不然会出现错误: LNK1146: 没有用选项“/LIBPATH:”指定的参数这里还需要提醒一点,在进行上面的修改之后,一定需要保存文件。 然后还需要执行qmake, 构建,运行步骤。 因为我一开始仅仅执行了运行步骤,所以一直相当于没有进行修改。
完成上面添加python路径之后,我们是可以正确找到python的文件的,但是这个时候又出现新的错误,如下:
出现的原因: 由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突 解决方法:在python的object.h中 slots冲突,因此修改object.h,我的object.h路径:E:\Users\Administrator\Anaconda3\envs\python3env\include\object.h 对448行进行修改:
修改之前:
修改之后:
然后在保存, cmake , 构建, 运行!
问题: 无法打开 python36_d.lib 的问题 解决: Anaconda3 的 pyconfig.h 文件中做出修改。 我的pyconfig.h路径: E:\Users\Administrator\Anaconda3\envs\python3env\include\pyconfig.h
将293行的,python36_d.lib改成python36.lib
改成:
同时注释337行:
运行到这里的话,表示我们离成功已经不远了,这个时候出现这个错误的原因是: 成的exe文件和test_py.py文件不在同一个文件夹里,只要手动将test_py.py拷贝到exe文件同级目录下即可。
这个时候生成的文件如图所示:
我们需要把test_py.py拷贝到这里:
最后我们在c_make, 编译,运行一下:
出现我们期望的结果。
有问题,多google。 实践出真知!