《人生苦短,我用python·七》各种报错问题解决及C++调用python的接口

news2024/11/16 18:36:30

1、VS的debug版本正常可以调用python的release版本(python安装完只有release版本的dll和lib),在项目——附加依赖项中加入python39.lib然后编译debug版本报错,无法打开python39_d.lib,我在项目属性配置的是调用release版本的库为啥调用了debug版本,点开python.h头文件进入pyconfig.h头文件,发现在debug模式下python的debug版本高亮,可能在项目属性里定义了宏_DEBUG,这就导致虽然debug项目属性配置了调用release版本的python,但这个宏导致还是调用debug版本的python
在这里插入图片描述
现在测试把#include<python.h>放在pybind11头文件面前在debug版本下这里_DEBUG会高亮,如果把python.h放在pybind11头文件后面在debug版本下_DEBUG不会高亮

2、通过命令可以正常import numpy,但通过C++调用python导入numpy报错:
PyRun_SimpleString(“import numpy”);

Original error was: No module named ‘numpy.core._multiarray_umath’
目前还不知道啥原因,但知道这是调用debug版本的python导致的,目前的解决方案是把VS的附加库目录python38_d.lib换成release版本的python39.lib

3、通过C++调用python中的函数

Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('D:/gen2Plugin/pythonRecipeTest')");//这一步很重要,设置.py文件的路径
导入python模块,是文件名
pModule= PyImport ImportModule("test1”);
if (!pModule){
	PyErr_Print();
	throw std::runtime_error("Failed to load completion module");
}

//从导入的模块中获取python端函数
pFunc = PyObject_GetAttrString(pModule, "getFunc");
if(!pFunc || !PyCallable_Check(pFunc)) {
	PyErr_Print();
	Py_XDECREF(pFunc);
	Py_DECREF (pModule);
	throw std::runtime_error("Failed to load get completions function");
}

//绐python中的函数传参
PyObject* pArgs = PyTuple_Pack(1, PyUnicode_FromString("John")); // Example argument: "John'
if(!pArgs){
	PyErr_Print();
	Py_DECREF(pFunc);
	Py_DECREF(pModule);
	throw std::runtime_error("Failed to create arguments");
}
//从python函数获取返回结果
PyObject* pValue =PyObject Call0bject(pFunc, pArgs);
Py_DECREF(pArgs);
if(pValue){
	// Convert Python object to C string and print result
	const char* result = PyUnicode_AsUTF8(pValue);
	std::cout<<"Python function returned: "<< result<< std::endl;
	Py_DECREF(pValue);
}
else {
	PyErr_Print();
}

Py_Finalize();

碰到一个巨坑的问题:python脚本名字不能为test.py,不然在导入脚本的中函数时 pFunc = PyObject_GetAttrString(pModule, “getFunc”);报错:module ‘test’ has no attribute ‘getFunc’,具体原因还不清楚
如果PyImport_ImportModule和PyObject_GetAttrString报错就换文件名或函数名

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

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

相关文章

少儿编程 2024年6月电子学会图形化编程等级考试Scratch一级真题解析(选择题)

2024年6月scratch编程等级考试一级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、音乐Video Game1的时长将近8秒&#xff0c;点击一次角色&#xff0c;下列哪个程序不能完整地播放音乐两次 A、 B、 C、 D、 答案&#xff1a;D 考…

Redis基础教程(十一):Redis 发布订阅

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【FFmpeg】avcodec_open2函数

目录 1. avcodec_open21.1 编解码器的预初始化&#xff08;ff_encode_preinit & ff_decode_preinit&#xff09;1.2 编解码器的初始化&#xff08;init&#xff09;1.3 释放编解码器&#xff08;ff_codec_close&#xff09; FFmpeg相关记录&#xff1a; 示例工程&#xff…

vue H5页面video 视频流自动播放, 解决ios不能自动播放问题

视频组件 <videostyle"width: 100%; height: 100%;object-fit: fill"class"player"refplayer_big_boxcontrolspreloadautoplay //自动播放muted //是否静音playsinline"true"x5-playsinline""webkit-playsinline"tru…

麒麟服务器操作系统漏洞补丁包怎么快速下载

第一种方案:【建议方案】 1、将漏洞公告里的“受影响的软件包”全部复制出来到文本文件中 2、在对应版本的服务器系统中修改好repo文件,如果在x86系统中下载aarch64的补丁包,可以将repo中的$basearch替换为aarch64. [root@localhost ~]# vim package.txt #将第一步的软件…

澳大利亚新闻.科技.汽车.旅行.商业类单发媒体

每日简报Daily Bulletin 澳大利亚西部时间ModernAustralian.com 澳大利亚垂直新闻.科技.汽车.旅行.商业类媒体&#xff0c;ModernAustralian.com是澳大利亚西部地区的一家权威媒体平台&#xff0c;提供全面的新闻报道、科技资讯、汽车信息、旅行指南、商业动态等内容。每日简报…

横截面数据回归

横截面数据回归 一些笔记 观测值一定要比参数值多 p值<0.05,拒绝H0. 参数显著&#xff0c;不能说明模型对 AIC与BIC准则&#xff0c;越小越好的指标值AIC 回归分析一定要进行残差的正态性检验。所有的残差都大于0&#xff0c;小于0&#xff0c;都不正常。残差正常应该是分…

p2p、分布式,区块链笔记:试用ZeroTier组网

ZeroTier 是一种用于创建和管理虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09;的软件定义网络&#xff08;SDN&#xff09;解决方案。它可以通过互联网将多个设备安全地连接在一起&#xff0c;就像它们在同一个本地网络上一样。主要开发语言为…

rust + mingw安装教程

0. 说明 windows上安装rust时&#xff0c;需要在电脑上安装C/C构建工具。推荐的的两种工具链可以选择&#xff1a; visual studio build toolsmingw 官方推荐使用visual studio&#xff0c;若你的电脑上已经安装了visual studio&#xff0c;则无需再安装&#xff0c;直接安装…

GPT Prompt冠军调教技巧CO-STAR

新加坡政府科技局 (GovTech) 举办的首届 GPT-4 提示工程大赛冠军Sheila Teo分享了她的一些提示撰写技巧及案例分析。 使用 CO-STAR 框架撰写Prompt CO-STAR是结构化的Prompt模版六大要素的首字母缩写&#xff0c;即&#xff1a; © Context 上下文&#xff1a;为任务提供背…

vue3进阶,渲染函数使用

目录 渲染函数使用场景 h() 渲染函数 渲染函数基础写法 渲染函数的组件传参&#xff0c;事件传递 渲染函数的插槽使用 结语 渲染函数使用场景 在写这篇文章之前&#xff0c;我会先简单说一下渲染函数&#xff0c;并且我会在第一个渲染函数的介绍中&#xff0c;标名渲染函数…

算法力扣刷题记录 二十八【225. 用队列实现栈】

前言 栈和队列篇。 记录 二十八【225. 用队列实现栈】 一、题目阅读 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void p…

单片机关键任务优先级的实现学习

与总体产品联调时&#xff0c;需要各个单机系统严格按照总体要求&#xff0c;进行数据输出&#xff0c;时间的偏差将出现系统异常&#xff0c;控制失败等不稳定情况产生&#xff0c;甚至影响到产品安全。 因此必须确保某些关键任务的优先执行。单片机任务优先级一般有两种方式…

My sql 安装,环境搭建

以下以MySQL 8.0.36为例。 一、下载软件 1.下载地址官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Installer for Windows 4.点击Archives选择合适版本 5.选择后下载…

【国产开源可视化引擎Meta2d.js】锚点

国产开源 乐吾乐潜心研发&#xff0c;自主可控&#xff0c;持续迭代优化 Github&#xff1a;GitHub - le5le-com/meta2d.js: The meta2d.js is real-time data exchange and interactive web 2D engine. Developers are able to build Web SCADA, IoT, Digital twins and so …

神经网络入门:从零到训练

想要认识神经网络&#xff0c;个人认为还是需要先从回归开始理解 线性回归 回归&#xff08;regression&#xff09;是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域&#xff0c;回归经常用来表示输入和输出之间的关系。 在机器学习领域中…

【Python机器学习】算法链与管道——构建管道

目录 1、首先&#xff0c;我们构建一个由步骤列表组成的管道对象。 2、向任何其他scikit-learn估计器一样来拟合这个管道 3、调用pipe.score 我们来看下如何使用Pipeline类来表示在使用MinMaxScaler缩放数据后&#xff0c;再训练一个SVM的工作流程&#xff08;暂时不用网格搜…

你知道是怎么运作的吗?神经网络内部原理解析

你知道神经网络是怎么运作的吗&#xff1f;神经网络内部原理解析 “神经网络就是一个具有输入和输出的黑盒” 神经网络模型就是模仿人类大脑神经元传递的过程&#xff0c;从使用者的角度来说&#xff0c;神经网络就是一个具有输入和输出的黑盒模型。 简化模型如下图&#xf…

python 比webdriver更好用的ChromiumPage

优点&#xff08;目前发现的&#xff09;&#xff1a; 不用配合selenium不用下载对应浏览器的webdriver&#xff0c;不用对应浏览器版本不用设置webdriver路径之类的设置目前没看到有出现像webdriver类似的浏览器被控制的提示&#xff0c;使用过程中好像也没被检测出来。每次不…

JAVA实现二分查找,斐波那契数列,深度优先搜索详情教程【包含代码】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…