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

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 resultconst 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.mzph.cn/pingmian/39969.shtml

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

相关文章

【人工智能】CPU、GPU与TPU:人工智能领域的核心处理器概述

在人工智能和计算技术的快速发展中&#xff0c;CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;图形处理器&#xff09;和TPU&#xff08;张量处理器&#xff09;作为核心处理器&#xff0c;各自扮演着不可或缺的角色。它们不仅在性能上各有千秋&#xff0c;还在不同的…

程序员学长 | 当 LSTM 遇上 Attention

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;当 LSTM 遇上 Attention 今天我们一起来聊一下深度学习中的注意力&#xff08;Attention&#xff09;机制 注意力机制是深度学习中引入的一种技术&am…

「前端」快速排序算法演示

快速排序算法演示。 布局描述 一个简单的HTML页面,用户可以在其中输入一系列用逗号分隔的数字。 一个CSS样式表,提供了一个美观大方的布局和样式。 一个JavaScript脚本,实现了快速排序算法,并在用户点击按钮时对输入的数字进行排序,并显示结果。 效果演示 核心代码 <…

Mysql-基础-DDL操作

1、数据库操作 查询 查询所有数据库 show databases; 创建 创建数据库 create database [if not exists] 数据库名 使用及查询 use 数据库名 select database() 查询当前所处数据库 删除 drop database [if not exists] 数据库名 2、表操作 查询当前库中的所…

【ArcGIS Pro 加载项】修复图层名为要素类别名

ArcPro从目录添加要素类至内容列表&#xff0c;图层名称默认为要素类别名。 但是一番操作之后&#xff0c;这个图层名称可能会被你改了&#xff0c;想复原的话就要手动去图层属性里面复制要素类名称或者别名来重命名了&#xff0c;多少有点不方便。 所以小编通过SDK制作了这个…

firewalld防火墙(二)

一&#xff1a;firewalld高级配置 1&#xff1a;关于iptables的知识 iptables 是Linux系统中传统的命令行防火墙管理工具&#xff0c;它基于内核的netfilter框架工作&#xff0c;用于配置和管理网络规则集&#xff0c;比如过滤&#xff08;允许/拒绝&#xff09;进出的数据包…

python3.8安装详细教程

python3.8下载及安装详细教程 Python 3.8 是一个重要的Python版本&#xff0c;它引入了一系列新功能和改进。以下是对Python 3.8的详细概述&#xff0c;包括其关键特性、安装方法以及版本状态等信息。 Python 3.8的关键特性 海象运算符&#xff08;Walrus Operator&#xff09…

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…

reggie外卖优化

文章目录 一、redis缓存1.1 缓存验证码1.2 缓存菜品数据 二、spring-cache 一、redis缓存 1.1 缓存验证码 不用sesiion&#xff0c;而使用redis来存放验证码。 首先在用户请求验证码&#xff0c;将验证码保存在sesion中&#xff0c;当登录成功之后&#xff0c;将redis中的验证…

Tekla Structures钢结构详图设计软件下载;Tekla Structures高效、准确的合作平台

Tekla Structures&#xff0c;它不仅集成了先进的三维建模技术&#xff0c;还融入了丰富的工程实践经验&#xff0c;为设计师、工程师和建筑商提供了一个高效、准确的合作平台。 在建筑项目的整个生命周期中&#xff0c;Tekla Structures都发挥着举足轻重的作用。从规划阶段开始…

Java Map转泛型对象

Springboot Map转泛型对象 import org.springframework.beans.PropertyAccessorFactory;public abstract class AbstractGoodsProcessor<T>{/*** 封装对象**/Overridepublic T assembleOfBeforeCheck(Map<String, Object> map){return this.mapToParam(map,0);};O…

录音转文字软件免费版哪个好?6个转文字工具让你轻松记录

随着小暑的到来&#xff0c;炎热的天气容易让人心浮气躁&#xff0c;影响工作效率。 在这个季节里&#xff0c;掌握一些办公技巧尤为关键。尤其是当我们需要整理会议记录或讲座内容时&#xff0c;如果能有一种方法&#xff0c;可以迅速将那些冗长的录音转换成清晰的文字&#…

使用Retrofit2+OkHttp监听上传或者下载进度会执行两次的问题

使用Retrofit2OkHttp监听上传或者下载进度RequestBody#writeTo/ResponseBody#source 会执行两次的问题 example&#xff1a; 问题原因&#xff1a; 使用了HttpLoggingInterceptor拦截器&#xff0c;并且日志等级为HttpLoggingInterceptor.Level.BODY 问题解决&#xff1a;

day08. 02 Python中的位运算符案例与解析

理解并掌握Python中的位运算符&#xff1a;异或&#xff08;^&#xff09;、与&#xff08;&&#xff09;、或&#xff08;|&#xff09;、反&#xff08;~&#xff09;、右移&#xff08;>>&#xff09;、无符号右移&#xff08;>>>&#xff0c;注意Python…

艾滋病隐球菌病的病原学诊断方法包括?

艾滋病隐球菌病的病原学诊断方法包括()查看答案 A.培养B.隐球菌抗原C.墨汁染色D.PCR 在感染性疾病研究中&#xff0c;单细胞转录组学的应用包括哪些()? A.细胞异质性研究B.基因组突变检测C.感染过程单细胞分析D.代谢通路分析 开展病原微生物网络实验室体系建设&#xff0c;应通…

Linux--平台设备、平台驱动的注册源码分析

一、设备和驱动的注册 设备注册两种方式&#xff1a; 1、从设备树解析动态注册。设备树dts文件中定义了设备节点&#xff0c;描述了硬件信息&#xff0c;比如寄存器信息&#xff0c;引脚信息等&#xff0c;内核将从设备树中解析得到的platform_device注册到平台总线中。具体设…

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域&#xff0c;它在许多应用中扮演着关键角色&#xff0c;如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一&#xff0c;它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

UniApp 中 Web/H5 正确使用反向代理解决跨域问题

因为 Vue3 的构建工具是 Vite&#xff0c;所以配置 vue.config.js 是没用的&#xff08;Vue2 因为使用 webpack 所以才用这个文件&#xff09; 这里提供一份 vue.config.js 的示例&#xff1a; module.exports {devServer: {proxy: {/api: {target: http://example.com,chan…

Python学习速成必备知识,(20道练习题)!

基础题练习 1、打印出1-100之间的所有偶数&#xff1a; for num in range(1, 101):if num % 2 0:print(num) 2、打印出用户输入的字符串的长度&#xff1a; string input("请输入一个字符串&#xff1a;")print("字符串的长度为&#xff1a;", len(str…

使用Python进行文件合并和分割

哈喽,大家好,我是木头左! 引言 在数据处理过程中,经常需要将多个文件合并为一个文件,或者将一个大文件分割成多个小文件。Python作为一种功能强大的编程语言,提供了多种方法来实现这一目标。本文将介绍如何使用Python进行文件合并和分割。 文件合并 1. 逐行合并 最简…