您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++通过内嵌解释器调用Python及间接调用Python三方库

51自学网 2022-02-21 10:37:04
  python
这篇教程C++通过内嵌解释器调用Python及间接调用Python三方库写得很实用,希望能帮到您。

本文章目的是脱离安装Python环境的前提下,由C++程序调用Python程序及Python相关三方库

1.移植Python解释器

Python环境的目录结构

python环境

路径详解

需要用的如下图
1.红色部分是生成路径下解释器运行时依赖
将红色部分拷贝到C++编译主ExE路径下即可
2.蓝色部分是VS配置编译时依赖

路径或文件名 作用
DLLs Python内部运行时核心及一些驱动
Lib 这里存放Python基础类库,开发人员所下载的Python三方库也会放在此目录下
python36.dll Python运行时主依赖

路径或文件名 作用
include C++调用所依赖的头文件,include时引用Python.h即可
libs C++调用所依赖的静态描述文件,C++Dll隐式调用引用python36.lib即可

2.VS配置(VS2017为例,此教程与VS版本无关)

这里我就写绝对路径为例
在这里插入图片描述
记得将Dlls,Lib,python36.dll拷贝到生成目录下,如果新增python三方库,重新拷贝Lib文件夹或者进行whl安装,这里就不做whl的介绍了

//在stdafx.cpp中#pragma comment(lib,"python36.lib")

3.C++调用程序样例

Py_Initialize();//加载Python解释器PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('Dlls/')");PyObject * pModule = NULL;PyObject * pFunc = NULL;PyObject *pArgs = NULL;PyObject *pResult = NULL;pModule = PyImport_ImportModule("ExternalPythonTool");//Python py文件名if (pModule == nullptr)	return true;pFunc = PyObject_GetAttrString(pModule, "add_func");//py文件内函数名//传入参数pArgs = Py_BuildValue("ii", 1, 2);//执行函数pResult = PyObject_CallObject(pFunc, pArgs);//返回值为C++double a = PyLong_AsDouble(pResult);Py_Finalize();//卸载Python解释器

Py_Initialize方法初始化消耗资源较大,不建议反复进行初始化及卸载。

4.被调Python程序样例

简单加法运算,并且调用了numpy装载array,作为c++间接调用Python三方库的测试

//ExternalPythonTool.pyimport mathimport numpy as npdef add_func(x,y):    a = math.sqrt(9)    data = [[1,2],[3,4],[5,6]]    b = np.array(data)    return x + y

将ExternalPythonTool.py也拷贝到C++exe运行路径

教程到此结束,网上诸多教程没有说明Dlls文件夹的作用,导致Python引用了如numpy 等三方库后PyImport_ImportModule环节就会出错,经学习解释器机理发现了Dlls内pyd文件的作用,特此出一详解教程希望和大家共同学习。


Python调用Prometheus监控数据并计算
OpenCV MediaPipe实现颜值打分功能
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。