VS2022+Python3.11实现C++调用python接口
查了一些资料,不是报这个错,就是报哪个错,没有找到和我安装的环境的一致的案例,于是将自己的摸索分享出来。
一、环境准备
1、Visual Studio 2022,下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
2、Python版本是3.11,下载地址:https://www.python.org/downloads/
3、安装Visual Studio 2022和Python3.11
安装过程简单,此处不再赘述,我们的重点是看如何实现接口调用的。
二、配置Visual Studio 2022
安装好环境后,使用Visual Studio 2022创建一个新项目,我这里取名c++python。需要配置3个地方:
1、右击项目名称-->属性,选择VC++目录,根据python安装路径,配置包含目录和库目录。python安装路径怎么查看?打开cmd,输入python回车,使用如下两个命令即可看到python路径。
>>> import sys >>> sys.path
将python安装路径下的include文件夹和libs文件夹复制到刚才新建的项目c++python目录下,配置如图所示:
2、右击项目名称-->属性,选择C/C++下的常规,配置附加包含目录,加上项目中include的路径,如图所示:
3、右击项目名称-->属性,选择链接器下的输入,配置附加依赖项,将项目中的libs目录中python311.lib复制一份,改名为python311_d.lib,附加依赖项的内容填写C:\Users\source\repos\c++python\libs\python311_d.lib;如图所示:
三、编写python代码和C++代码
1. 首先,创建一个名为test_python.py的Python文件,内容如下:
def add(a, b): return a + b
2. 然后,创建一个名为main.cpp的C++文件,内容如下:
#include <iostream> #include <Python.h> int main() { /*初始化python*/ Py_Initialize(); /*初始化python系统文件路径,否则加载不到要调用的test_python.py文件*/ PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); /*加载要调用的python文件名称,当前测试文件名称:test_python.py*/ PyObject* pName = PyUnicode_DecodeFSDefault("test_python"); PyObject* pModule = PyImport_Import(pName); Py_XDECREF(pName); if (pModule != NULL) { /*加载python模块中的函数*/ PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); if (PyCallable_Check(pFunc)) { /*给pythonm模块中的函数add传递2个参数,以元组的形式传递*/ PyObject* pArgs = PyTuple_New(2); /*给add函数传递第一个参数6*/ PyTuple_SetItem(pArgs, 0, PyLong_FromLong(6)); /*给add函数传递第二个参数10*/ PyTuple_SetItem(pArgs, 1, PyLong_FromLong(10)); /*C++的python接口调用add函数,返回计算结果*/ PyObject* pValue = PyObject_CallObject(pFunc, pArgs); Py_XDECREF(pArgs); if (pValue != NULL) { /*打印计算结果*/ std::cout << "\n " << std::endl; std::cout << "Result of call: " << PyLong_AsLong(pValue) << std::endl; std::cout << "\n " << std::endl; Py_XDECREF(pValue); } else { PyErr_Print(); } } else { if (PyErr_Occurred()) { PyErr_Print(); } fprintf(stderr, "Cannot find function \"add\""); } Py_XDECREF(pFunc); Py_XDECREF(pModule); } else { PyErr_Print(); fprintf(stderr, "Failed to load \"%s\"", "test"); return 1; } /*结束python初始化*/ Py_Finalize(); return 0; }
test_python.py和main.cpp在同一目录,如图所示:
3. 编译
1>正在生成代码
1>Previous IPDB not found, fall back to full compilation.
1>All 16 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1>已完成代码的生成
1>c++python.vcxproj -> C:\Users\source\repos\c++python\x64\Release\c++python.exe
========== “全部重新生成”: 1 成功,0 失败,0已跳过 ==========
========== 占用时间 00:02.052 ==========
4. 点击菜单"调试-->开始执行(不调试)运行,可以看到输出结果:
到此这篇关于VS2022+Python3.11实现C++调用python接口的文章就介绍到这了,更多相关C++调用python接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Windows环境打包python工程为可执行程序的详细过程
我的开发环境是windows7,然后系统是64位,安装的python和wxpython都是32位的,本文记录我怎样用pyinstaller打包我用python开发的工程,在网上搜索了很多资源,基本上都是不全的,所以我在这儿记录一下这个比较完整的过程,一起看看吧2024-01-01Python使用Dijkstra算法实现求解图中最短路径距离问题详解
这篇文章主要介绍了Python使用Dijkstra算法实现求解图中最短路径距离问题,简单描述了Dijkstra算法的原理并结合具体实例形式分析了Python使用Dijkstra算法实现求解图中最短路径距离的相关步骤与操作技巧,需要的朋友可以参考下2018-05-05
最新评论