Visual Studio 2022+Python3.11实现C++调用python接口

大家好!我是编码小哥,欢迎关注,持续分享更多实用的编程经验和开发技巧,共同进步。

查了一些资料,不是报这个错,就是报哪个错,没有找到和我安装的环境的一致的案例,于是将自己的摸索分享出来。

一、环境准备

1、Visual Studio 2022,下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

图1

2、Python版本是3.11,下载地址:https://www.python.org/downloads/

图2

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目录下,配置如图所示:

图3

2、右击项目名称-->属性,选择C/C++下的常规,配置附加包含目录,加上项目中include的路径,如图所示:

图4

3、右击项目名称-->属性,选择链接器下的输入,配置附加依赖项,将项目中的libs目录中python311.lib复制一份,改名为python311_d.lib,附加依赖项的内容填写C:\Users\source\repos\c++python\libs\python311_d.lib;如图所示:

图5

三、编写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在同一目录,如图所示:

图6

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. 点击菜单"调试-->开始执行(不调试)运行,可以看到输出结果:

图7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL错题集1

1.找出选修课程成绩最差的选课记录 注&#xff1a; 聚合函数只能用在group by和&#xff08;&#xff09;括号中 找最值可用排序order bylimit 1 2. 查询选修成绩 合格的课程 超过2门的 学生编号 3.删除姓名为"LiMing"的学生信息 注&#xff1a; 删除一整行信息&…

Google Guava 集合工具使用详解

文章目录 集合集合分类- MultisetHashMultisetTreeMultisetLinkedHashMultisetConcurrentHashMultisetEnumMultisetImmutableMultiset - MultimapArrayListMultimapHashMultimapLinkedListMultimapLinkedHashMultimapTreeMultimapImmutableListMultimapImmutableSetMultimap - …

CnosDB有主复制演进历程

分布式存储系统的复杂性涉及数据容灾备份、一致性、高并发请求和大容量存储等问题。本文结合CnosDB在分布式环境下的演化历程&#xff0c;分享如何将分布式理论应用于实际生产&#xff0c;以及不同实现方式的优缺点和应用场景。 分布式系统架构模式 分布式存储系统下按照数据复…

Android Audio实战——音频属性设置(二十二)

在 Android 中,使用音频属性(AudioAttributes)可以控制音频的行为。AudioAttributes 已经定义了一些常见的属性,比如音频用途、音频内容类型、音频标志等。 一、音频属性简介 1、常见属性 音量(volume):使用 setParameters("volume=5") 将音量设置为 5(范围…

java消息中间件简介

一、为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤&#xff0c;直达目的&#xff0c;怎么讲呢&#xff0c;就是比如你想很多人&#xff0c;知道你的动态&#xff0c;而知道的人可能手机没电&#xff0c;可能手机信号不好&#xff0c;可能手机不在服务区&#xff0c…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Maven的安装与配置本地仓库,镜像源,环境变量详细步骤

参考视频&#xff1a; 黑马程序员2023新版JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程 【小飞非系列】最新Maven实战教程-项目实战构建利器 文章目录 一.下载Maven安装包二.配置Maven的本地仓库(本机仓库)三.配置镜像源&#xff08;加速jar包的下载)四.配置Maven的环…

Zookeeper 安装与部署

Zookeeper官网 目录 1 配置文件参数解读2 Zookeeper 单点安装3 Zookeeper 分布式安装 1 配置文件参数解读 Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下&#xff1a; &#xff08;1&#xff09;tickTime 2000&#xff1a;通信心跳数&#xff0c;Zookeeper 服务器与客户…

IdleStateHandler 心跳机制源码详解

优质博文&#xff1a;IT-BLOG-CN 一、心跳机制 Netty支持心跳机制&#xff0c;可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中&#xff0c;客户端和服务端定时向对方发送数据包通知对方自己还在线&#xff0c;保证连接的有效性的一种机制。在服务器和客户端之间一…

再谈项目管理中的效率问题

一、把事情做对。 敏捷的核心理念追求的就是把事情做对&#xff0c;这样的效率是最高的。中国古代就有南辕北辙的故事&#xff0c;方向错了再怎么努力都是白搭。那什么才是对的事情&#xff1f;这里分成了两派&#xff1a;1、瀑布方式认为一开始提的合同、需求就是对的事情&am…

嵌入式常用滤波算法

在嵌入式系统中&#xff0c;信号处理是一个关键的方面&#xff0c;特别是在处理来自各种传感器的数据时。滤波算法在这方面发挥着重要作用&#xff0c;用于去除噪声、平滑数据或提取有用的信号。以下是一些在嵌入式系统中常用的滤波算法&#xff1a; 1 低通滤波器&#xff08;…

bean依赖属性配置

bean依赖属性配置 文章目录 bean依赖属性配置 Data ConfigurationProperties(prefix "cartoon") public class CartoonProperties {private Cat cat;private Mouse mouse; }cartoon:cat:name: whatage: 5mouse:name: howage: 6这样的话&#xff0c;业务bean无需在读…

FPC和PCB有哪些区别?

现在电子技术越来越先进&#xff0c;CPU可以做到5nm工艺&#xff0c;电路板可以做到几十层&#xff0c;可折叠屏应用多款手机中。 什么是FPC&#xff1f; FPC&#xff1a;Flexible Printed Circuit&#xff0c;柔性电路板&#xff0c;又被称为“软板” FPC 以聚酰亚胺或聚酯薄…

Active Stereo Without Pattern Projector论文精读

1.背景补充 主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式 主动立体相机12&#xff1a; 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。主动视觉的实现方式通常有&#xff1a;改变环境中的光照条件、改变相机的视角、移动相机自身位置等&…

利用 LD_PRELOAD劫持动态链接库,绕过 disable_function

目录 LD_PRELOAD 简介 程序的链接 动态链接库的搜索路径搜索的先后顺序&#xff1a; 利用LD_PRELOAD 简单的劫持 执行id命令 反弹shell 引申至 PHP 绕过disable_function 方法1&#xff1a;使用蚁剑的扩展工具绕过disable_function 方法2&#xff1a;利用 mail 函数…

Python批量图像处理--图片重命名、图片旋转

图像批量重命名&#xff1a; 使用batch_rename_images函数实现对多个文件夹下面的图片进行重命名操作 先检查文件名的后缀&#xff0c;使用了.endswith()方法来判断文件名是否以.jpg、.png或.JPG结尾&#xff0c;判断是否为图片文件 然后构造新的文件路径new_filepath&#…

电磁兼容EMC理论基础汇总

目录 0. 序言 1. EMC的基础介绍 1.1 EMC电磁兼容的定义 1.2 EMC的重要性 1.3 EMC的三要素 2. 库仑定律 3. 趋肤效应与趋肤深度 4. 电阻抗公式 4.1 电阻 4.2 容抗 4.3 感抗 4.4 电路元件的非理想性 5. 麦克斯韦方程组 5.1 高斯磁定律 5.2 高斯定律 5.3 法拉…

Appwidget开发基本介绍

本篇主要对appwidget开发进行简单介绍&#xff0c;为后续漏洞挖掘相关做前置铺垫 appwidget简介 官方解释如下&#xff1a; 应用微件是可以嵌入其他应用&#xff08;如主屏幕&#xff09;并接收定期更新的微型应用视图。这些视图称为界面中的微件&#xff0c;您可以使用应用微…

MySQL学习day04(一)

DQL学习&#xff08;Data Query Language数据查询语言&#xff09; DQL-语法&#xff1a; select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件别表 order by 排序字段列表 limit 分页参数 基本查询条件查询&#xff08;where&#xff09;…

打板选股的方法

打板选股是一种短线投资策略&#xff0c;主要通过观察和分析股票的涨停板情况来进行选股。以下是一些常用的打板选股方法&#xff1a; 首板选股&#xff1a;在市场开盘后&#xff0c;迅速查看所有股票的涨停情况&#xff0c;找出第一个涨停的股票。这种方法需要投资者有较强的市…