c++ 与 python代码的互相调用

c++调用python代码

环境配置

安装Visual Studio2017

参考这篇博客
用MingW会有很多坑

创建Visual Studio项目文件

创建控制台应用

如图
在这里插入图片描述

配置项目

在这里插入图片描述

属性 —— C++ —— 附加包含目录

博主的Python目录在 D:\ProgramData\Anaconda3\envs\yolo
因此C++附加包含目录为 D:\ProgramData\Anaconda3\envs\yolo\include
在这里插入图片描述

属性 —— 链接器 —— 附加库目录

因此链接器附加库目录为 D:\ProgramData\Anaconda3\envs\yolo\libs
在这里插入图片描述

python37_d.lib

打开D:\ProgramData\Anaconda3\envs\yolo\libs
博主Python3版本为python37
因此复制python37.lib 改名为python37_d.lib
在这里插入图片描述
继续打开VS2017
属性——链接器——输入——附加依赖项
输入刚才重命名的lib文件名
在这里插入图片描述

报错:Fatal Python error

若出现
Fatal Python error: Py_Initialize: unable to load the file system codec ModuleNotFoundError: No module named 'encodings
则需要设置系统环境变量
PYTHONHOME = Python文件夹
PYTHONPATH = Python文件夹 \libs
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200209192741222.png

Conda 与 PYTHONHOME不兼容

由于未知原因 只要控制变量里存在PYTHONHOME 则无法用CMD等方式管理Conda的版本
解决方案:
删去PYTHONHOME环境变量
在Py_Initialize()上一行加入Py_SetPythonHome
如下图所示

Py_SetPythonHome(L"D:\\ProgramData\\Anaconda3\\envs\\yolo");

Py_Initialize();
无法读取部分第三方库(如numpy PIL)

在环境变量Path中加入 虚拟环境的一套目录
D:\ProgramData\Anaconda3\envs\yolo;
D:\ProgramData\Anaconda3\envs\yolo\libs;
D:\ProgramData\Anaconda3\envs\yolo\Library\bin;
D:\ProgramData\Anaconda3\envs\yolo\DLLs;
D:\ProgramData\Anaconda3\envs\yolo\Lib;
并上移到最前面

调用Python的注意事项

0、请先用Python运行一下自己的代码 查看第三方包齐不齐全 并且该虚拟环境是否在环境变量中
1、例如PyObject* pyPath = Py_BuildValue("(s)", “F:\test\test.jpg”);
文件路径中不能出现中文
2、如使用tensorflow-gpu版的yolo的时候
存在
“model_path”: ‘weight.h5’,
“anchors_path”: ‘model_data/yolo_anchors.txt’,
“classes_path”: ‘model_data/coco_classes.txt’,
这些相对路径在python中是可行的

但是在c++中要改成绝对路径
path = r’F:\同济\郎洪师兄\植入修补\c++_py\use_py\x64\Debug\’
“model_path”: path+‘weight.h5’,
“anchors_path”: path + ‘model_data/yolo_anchors.txt’,
“classes_path”: path + ‘model_data/coco_classes.txt’,
3、若不知道哪里报错的话
把python的代码全部写成
PyRun_SimpleString(“XXXX”);的形式
这样在c++窗口内就可以看到Python代码的报错情况

小结

环境变量中设置Path和PYTHONPATH
PYTHONHOME在 Py_Initialize();之前人为设置

Python调用C++函数

未完待续

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值