当前位置: 首页 > news >正文

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

相关文章:

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

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 查了一些资料&#xff0c;不是报这个错&#xff0c;就是报哪个错&#xff0c;没有找到和我安装的环境的一致的案例&#xff0c;于是将自己的摸索分…...

10天玩转Python第2天:python判断语句基础示例全面详解与代码练习

目录 1.课程之前1.1 复习和反馈1.2 作业1.3 今日内容1.4 字符串格式化的补充1.5 运算符1.5.1 逻辑运算符1.5.2 赋值运算符1.5.3 运算符优先 2.判断2.1 if 的基本结构2.1.1 基本语法2.1.2 代码案例2.1.3 练习 2.2 if else 结构2.2.1 基本语法2.2.2 代码案例2.2.3 练习 2.3 if 和…...

2024年网络安全竞赛-网站渗透

网站渗透 (一)拓扑图 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 使用nmap工具对靶机进行信息收集 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 访问页面即可 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交…...

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…...

聊聊AsyncHttpClient的KeepAliveStrategy

序 本文主要研究一下AsyncHttpClient的KeepAliveStrategy KeepAliveStrategy org/asynchttpclient/channel/KeepAliveStrategy.java public interface KeepAliveStrategy {/*** Determines whether the connection should be kept alive after this HTTP message exchange.…...

视频推拉流直播点播EasyDSS平台点播文件加密存储的实现方法

视频推拉流直播点播系统EasyDSS平台&#xff0c;可提供流畅的视频直播、点播、视频推拉流、转码、管理、分发、录像、检索、时移回看等功能&#xff0c;可兼容多操作系统&#xff0c;还能支持CDN转推&#xff0c;具备较强的可拓展性与灵活性&#xff0c;在直播点播领域具有广泛…...

LVGL——按钮部件

目录 一、组成部分 二、按钮部件操作 1、创建 2、设置样式 3、添加事件 4、代码例程 三、按钮部件案例 一、组成部分 主体&#xff08;LV_PART_MAIN&#xff09; 二、按钮部件操作 1、创建 lv_obj_t *btn lv_btn_create( parent );2、设置样式 lv_obj_set_siz…...

RE2文本匹配调优实战

引言 在RE2文本匹配实战的最后&#xff0c;博主说过会结合词向量以及其他技巧来对效果进行调优&#xff0c;本篇文章对整个过程进行详细记录。其他文本匹配系列实战后续也会进行类似的调优&#xff0c;方法是一样的&#xff0c;不再赘述。 本文所用到的词向量可以在Gensim训练…...

Java - 线程间的通信方式

线程通信的方式 线程中通信是指多个线程之间通过某种机制进行协调和交互 线程通信主要可以分为三种方式&#xff0c;分别为共享内存、消息传递和管道流。每种方式有不同的方法来实现 共享内存&#xff1a;线程之间共享程序的公共状态&#xff0c;线程之间通过读-写内存中的公…...

【计算机网络】HTTP响应报文Cookie原理

目录 HTTP响应报文格式 一. 状态行 状态码与状态码描述 二. 响应头 Cookie原理 一. 前因 二. Cookie的状态管理 结束语 HTTP响应报文格式 HTTP响应报文分为四部分 状态行&#xff1a;包含三部分&#xff1a;协议版本&#xff0c;状态码&#xff0c;状态码描述响应头&a…...

2023年度盘点:智能汽车、自动驾驶、车联网必读书单

【文末送书】今天推荐几本自动驾驶领域优质书籍 前言 2023年&#xff0c;智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展。自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡&#xff0c;更重要的是相关技术成本的下降。根据《全球电动汽车展望2023》等行业报告&#xff0c…...

一文讲解如何从 Clickhouse 迁移数据至 DolphinDB

ClickHouse 是 Yandex 公司于2016年开源的 OLAP 列式数据库管理系统&#xff0c;主要用于 WEB 流量分析。凭借面向列式存储、支持数据压缩、完备的 DBMS 功能、多核心并行处理的特点&#xff0c;ClickHouse 被广泛应用于广告流量、移动分析、网站分析等领域。 DolphinDB 是一款…...

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-5Laplace Transform of Convolution卷积的拉普拉斯变换 Laplace Transform : X ( s ) L [ x ( t ) ] ∫ 0 ∞ x ( t ) e − s t d t X\left( s \right) \mathcal{L} \left[ x\lef…...

生产问题: 利用线程Thread预加载数据缓存,其它类全局变量获取缓存偶发加载不到

生产问题: 利用线程Thread预加载数据缓存偶发加载不到 先上代码 public class ThreadTest {//本地缓存Map<String, Object> map new HashMap<String, Object>();class ThreadA implements Runnable{Overridepublic void run() {System.out.println("Thread…...

Elasticsearch mapping 之 性能相关配置

ES 常见类型 通用类型: 二进制: binary 布尔型: boolean 字符串: keyword, constant_keyword, wildcard, text 别名: alias 对象: object, flattened, nested, join 结构化数据类型: Range, ip, version, murmur3 空间数据类型: geo_point, geo_shape, point, shape 性…...

adb push报错:remote couldn‘t create file: Is a directory

adb push报错&#xff1a;remote couldn‘t create file: Is a directory 出现这个问题可能是电脑本地目录中包含中文或者是目录地址中多包含了一个/ 比如说以下两种路径 1. test/测试音频文件1/a.mp3 2.test/test_audio/ 这两种都是不可以的&#xff08;我是在as中执行的…...

GitLab 服务更换了机器,IP 地址或域名没有变化时,可能会出现无法拉取或提交代码的情况。

当 GitLab 服务更换了机器&#xff0c;但 IP 地址或域名没有变化时&#xff0c;可能会出现无法拉取或提交代码的情况。 这可能是由于 SSH 密钥或 SSL 证书发生了变化。以下是一些可能的解决步骤&#xff1a; 这可能是由于 SSH 密钥或 SSL 证书发生了变化。以下是一些可能的解决…...

【华为OD题库-076】执行时长/GPU算力-Java

题目 为了充分发挥GPU算力&#xff0c;需要尽可能多的将任务交给GPU执行&#xff0c;现在有一个任务数组&#xff0c;数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务&#xff0c;一次执行耗时1秒&#xff0c;在保证GPU不空闲情况下&…...

持续集成交付CICD:Jenkins使用GitLab共享库实现前后端项目Sonarqube

目录 一、实验 1.Jenkins使用GitLab共享库实现后端项目Sonarqube 2.优化GitLab共享库 3.Jenkins使用GitLab共享库实现前端项目Sonarqube 4.Jenkins通过插件方式进行优化 二、问题 1.sonar-scanner 未找到命令 2.npm 未找到命令 一、实验 1.Jenkins使用GitLab共享库实现…...

Linux文件结构与文件权限

基于centos了解Linux文件结构 了解一下文件类型 Linux采用的一切皆文件的思想&#xff0c;将硬件设备、软件等所有数据信息都以文件的形式呈现在用户面前&#xff0c;这就使得我们对计算机的管理更加方便。所以本篇文章会对Linux操作系统的文件结构和文件权限进行讲解。 首先…...

论文降重降AI难?自带双功能黑科技的实用工具盘点

论文降重和消除AI生成痕迹是很多创作者面临的双重难题&#xff0c;选对工具能节省大量时间精力。下面整理了几款自带降AIGC率功能的实用工具&#xff0c;覆盖中文、英文、应急、轻量优化等不同使用场景&#xff0c;附实际使用效果与核心特点&#xff0c;帮你快速找到适配需求的…...

论文写作卡壳不用愁!这几款AI工具帮你高效赶稿

写论文最怕思路卡壳&#xff1f;大纲憋不出来、正文续写没头绪、降重改到崩溃&#xff0c;还担心AI生成痕迹过不了检测&#xff1f;以下几款实用AI写作工具直击本硕生核心需求&#xff0c;从初稿到答辩全流程辅助&#xff0c;让写作效率直接翻倍。 一、SpeedAI科研小助手&#…...

CST可调谐太赫兹超材料吸收器仿真教学,石墨烯,二氧化钒,锑化铟等材料设置 包括建模过程,后处理

CST可调谐太赫兹超材料吸收器仿真教学&#xff0c;石墨烯&#xff0c;二氧化钒&#xff0c;锑化铟等材料设置 包括建模过程&#xff0c;后处理&#xff0c;吸收光谱图教学等 包括宽带吸收器、窄带&#xff0c;以及宽窄带吸收器设计"打开CST微波工作室&#xff0c;先别急着…...

天梯赛L2-006 树的遍历

L2-006 树的遍历 给定一棵二叉树的后序遍历和中序遍历&#xff0c;请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤30&#xff09;&#xff0c;是二叉树中结点的个数。第二行给出其后序遍历序…...

2026年硕士学位论文降AI率工具推荐:结论和展望部分怎么降

2026年硕士学位论文降AI率工具推荐&#xff1a;结论和展望部分怎么降 72%。 我收到知网检测报告那一刻&#xff0c;说实话有点懵。我那篇论文写了快两个月&#xff0c;每个字都是自己敲的。但学校的要求摆在那——AI率低于20%才能送审。折腾了几天之后&#xff0c;靠嘎嘎降AI…...

实战演练:在快马平台构建并部署一个完整的云原生博客系统

实战演练&#xff1a;在快马平台构建并部署一个完整的云原生博客系统 最近在尝试云原生技术栈时&#xff0c;发现InsCode(快马)平台特别适合做全流程的实战演练。这里记录下如何用这个平台快速搭建一个包含前后端和数据库的博客系统&#xff0c;并实现自动化部署的全过程。 项…...

5个实用技巧:掌握FastBle日志系统的完整调试指南

5个实用技巧&#xff1a;掌握FastBle日志系统的完整调试指南 【免费下载链接】FastBle Android Bluetooth Low Energy (BLE) Fast Development Framework. It uses simple ways to filter, scan, connect, read ,write, notify, readRssi, setMTU, and multiConnection. 项目…...

Shell脚本进程锁机制解析

1. 命令行参数解析 (第9-21行)12345while getopts "m:o:r:" arg; docase $arg in# ... 参数处理逻辑&#xff08;代码中省略了具体内容&#xff09;esacdone使用 getopts 解析命令行参数支持三个带参数的选项&#xff1a;-m、-o、-r具体处理逻辑在代码中被省略了2. 文…...

ConsoleZ终极指南:10个技巧提升Windows终端生产力

ConsoleZ终极指南&#xff1a;10个技巧提升Windows终端生产力 【免费下载链接】console 项目地址: https://gitcode.com/gh_mirrors/conso/console ConsoleZ是一个功能强大的Windows终端增强工具&#xff0c;专为提升命令行工作效率而设计。作为Console 2的分支版本&am…...

Alexa Plus 拓展食品配送领域,语音订餐体验升级

Alexa Plus 开启食品配送新功能从本周起&#xff0c;Alexa Plus 拓展至食品配送领域&#xff0c;用户可通过它从优步外卖&#xff08;Uber Eats&#xff09;和 Grubhub 订餐。只需将优步或 Grubhub 应用与 Alexa Plus 设备关联&#xff0c;就能询问食品配送情况&#xff0c;并通…...