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; 删除一整行信息&…

CnosDB有主复制演进历程

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

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;保证连接的有效性的一种机制。在服务器和客户端之间一…

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 函数…

电磁兼容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;您可以使用应用微…

软件工程精品课程教学网站的设计与实现

系统功能需求分析 本系统要求采用Browser/Server模式设计开发&#xff0c;可以作为一般高等院校的网络学堂&#xff1b;可以为教师的辅助教学或者网络教学提供一个完善的教学网站&#xff1b;学生可以利用本教学网站来完成一些课程的学习任务。 2.2.1 功能划分 《软件工程》教学…

Sakila数据库和World数据库

Sakila数据库和World数据库 安装MySQL8.2的时候多出两个样例数据库 Sakila数据库和World数据库 Sakila数据库是一个关于DVD租赁的样例数据库&#xff0c;用于展示MySQL的各种功能和特性。Sakila数据库中包含了多个表&#xff0c;包括电影、演员、客户、租赁记录等&#xff0c;可…

Oracle(2-6) Backup and Recovery Overview

文章目录 一、基础知识1、Categories of Failures 故障类别2、Causes of Statement Failures 语句失败的原因故障情况Resolutions 决议 3、User Process Failures 用户进程失败故障情况Resolutions 决议 4、Possible User Errors 用户错误类型故障情况Resolutions 决议 5、Inst…

实验6 二叉树操作

0x01 实验目的 掌握二叉树的基本概念&#xff0c;二叉树的存储结构使用链表。 0x02 实验内容 输入一个完全二叉树的层次遍历字符串&#xff0c;创建这个二叉树&#xff0c;输出这个二叉树的前序遍历字符串、中序遍历字符串、后序遍历字符串、结点数目、二叉树高度(上述每一个…

计算UDP报文CRC校验的总结

概述 因公司项目需求&#xff0c;遇到需要发送带UDP/IP头数据包的功能&#xff0c;经过多次尝试顺利完成&#xff0c;博文记录以备忘。 环境信息 操作系统 ARM64平台的中标麒麟Kylin V10 工具 tcpdump、wireshark、vscode 原理 请查看大佬的博文 UDP伪包头定义&#x…

MQ - 消息系统

消息系统 1、消息系统的演变 在大型系统中&#xff0c;会需要和很多子系统做交互&#xff0c;也需要消息传递&#xff0c;在诸如此类系统中&#xff0c;你会找到源系统&#xff08;消息发送方&#xff09;和 目的系统&#xff08;消息接收方&#xff09;。为了在这样的消息系…

数据结构和算法-哈夫曼树以相关代码实现

文章目录 总览带权路径长度哈夫曼树的定义哈夫曼树的构造法1法2 哈夫曼编码英文字母频次总结实验内容&#xff1a; 哈夫曼树一、上机实验的问题和要求&#xff08;需求分析&#xff09;&#xff1a;二、程序设计的基本思想&#xff0c;原理和算法描述&#xff1a;三、调试和运行…