Qt C++与Python混合编程:补充错误

在提示中,需要引用Python.h,出现错误。

1、找不到Python.h

如果是pro工程,需要在里面配置;

INCLUDEPATH += /Users/xinnianwang/opt/anaconda3/include
LIBS += /Users/xinnianwang/opt/anaconda3/lib

如果是CMakeLists.txt需要配置

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(testHpy ${PYTHON_LIBRARIES})

2、会出现object.h中的参数错误。

因为slots和qT中的slots关键词矛盾。

error: expected member name or ';' after declaration specifiers PyType_Slot *slots; /* terminated by slot==0. */ ~~~~~~~~~~~ ^

需要在头文件中使用

#undef slots
#include <python3.9/Python.h>
#define slots Q_SLOTS

3、出现编码错误:Fatal Python error: failed to get the Python codec of the filesystem encoding

这是一个 Python 运行错误,可能是因为 Python 解释器无法获取系统文件系统编码的编解码器。具体来说,Python 试图将字符串转换为字节串或者反之,但由于无法获取文件系统编码的编解码器,导致程序出现错误。

根据 Stack Overflow 上的一篇回答 [1],该错误可能与 Windows 环境变量 PYTHONPATHPYTHONHOME 有关。如果这些环境变量被设置了错误的路径,将导致 Python 解释器无法找到所需的编解码器,从而导致上述错误。

另外,Python 官方文档中有关于编码器的章节 [3],这里介绍了 codecs 模块的基本概念和使用方法,其中包括如何定义自定义编解码器等。

要解决这个问题,可以尝试以下几种方法:

  1. 确认环境变量 PYTHONPATH 和 PYTHONHOME 是否正确设置。
  2. 尝试删除系统环境变量 PYTHONPATH 和 PYTHONHOME ,重新安装 Python。
  3. 尝试重新安装 Python 编译器来修复编解码器问题。

4、设置 配置windows的PYTHONHOME和PYTHONPATH

要配置 Windows 的 PYTHONHOMEPYTHONPATH 环境变量,可以按照以下步骤操作:

  1. 打开 Windows 的 “控制面板 -> 系统和安全 -> 系统”,点击左侧的 “高级系统设置”。
  2. 在弹出的 “系统属性” 窗口中,选择 “高级” 选项卡,然后点击窗口下方的 “环境变量” 按钮。
  3. 在 “系统变量” 区域中,点击 “新建” 按钮,输入 PYTHONHOME 作为变量名,然后将 Python 安装目录的路径(如 C:\Users\wangxn\anaconda3)作为变量值,最后点击 “确定”。
  4. 在同样的 “系统变量” 区域中,找到 Path 变量,点击 “编辑” 按钮。
  5. 在弹出的 “编辑环境变量” 窗口中,点击 “新建” 按钮,输入 %PYTHONHOME%,然后点击 “确定” 两次。
  6. 再在 “系统变量” 区域中,点击 “新建” 按钮,输入 PYTHONPATH 作为变量名,然后将 Python 应用程序搜索模块文件的路径(如 C:\Users\wangxn\anaconda3\Lib\site-packages)作为变量值,最后点击 “确定”。
  7. 完成后,点击 “确定” 关闭所有窗口。

通过以上步骤,你就可以成功地配置 Windows 的 PYTHONHOMEPYTHONPATH 环境变量了,可以在程序中使用相应的环境变量来正确地加载 Python 模块和编解码器。

5、main.cpp:8:5: No matching function for call to 'Py_SetProgramName' pylifecycle.h:40:18: candidate function not viable: no known conversion from 'char *' to 'const wchar_t *' for 1st argument 这个错误方案,请举例 

这个错误通常是由于编译器无法将 char* 类型的 C 字符串隐式转换为 wchar_t* 类型的宽字符字符串。Py_SetProgramName 函数期望接收一个宽字符字符串类型的参数,但在代码中给出了普通 C 字符串类型的参数,导致编译器报错。

以下是一些解决此问题的示例方案:

#include <Python.h>

int main() {
    const wchar_t *program = Py_DecodeLocale("example", nullptr);
    Py_SetProgramName(program);
    PyMem_RawFree(const_cast<wchar_t *>(program));
    // ...
    return 0;
}

在这里,我们首先调用 Py_DecodeLocale 函数将 "example" 字符串转换为宽字符字符串类型,并将结果存储在 program 变量中。我们将 program 参数传递给 Py_SetProgramName 函数,以设置 Python 解释器的程序名称。最后,我们使用 PyMem_RawFree 函数释放 program 变量所分配的内存。

6、:-1: error: LNK1104: 无法打开文件“python39_d.lib”

这个一般使用的msvc编译器编译的,改为MinGw即可。

下面这个解决方案我试验过。

在这个 Stack Overflow 页面中,有人询问了与 "LNK1104: cannot open file 'python39_d.lib'" 相关的错误。在这个问题的回答中,有人建议创建一个重名为 python39_d.lib 的 Python 库文件的副本,并将其放在项目目录下。还有一些其他的解决方案,例如编辑 pyconfig.h 文件,以替换 python39_d.lib 的 pragma 指令,或者重新设置库文件路径等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【清明节】开发平台公司流辰信息缅怀先祖,传承精神,撸起袖子创佳绩!

四月暖春&#xff0c;草长莺飞&#xff0c;杨柳依依&#xff0c;大自然呈现出一片生机勃勃的朝气景象。中国传统民俗节日——清明节踏春而来&#xff0c;在回乡祭祖&#xff0c;缅怀先人的季节里&#xff0c;哀思、怀念、伤感已经成为整个清明节的主基调。在这万物复苏、春和景…

Spring循环依赖冤冤相报何时了

Spring循环依赖 &#x1f68e;什么是循环依赖&#xff1f;那么循环依赖是个问题吗&#xff1f;单例setter, spring是如何解决的为什么需要三级缓存单单只有两级缓存行不行还得是你三级缓存三级缓存解决依赖循环全解梦想不会逃跑&#xff0c;会逃跑的永远都是自己 什么是循环依赖…

MySQL逻辑架构

讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 逻辑架构剖析 1.1 服务器处理客户端请求 首先MySQL是典型的C/S架构&#xff0c;即Client/Server 架构&#xff0c;服务器端程序使用的mysqld…

【2023】Kubernetes之Pod与容器状态关系

目录简单创建一个podPod运行阶段&#xff1a;容器运行阶段简单创建一个pod apiVersion: v1 kind: pod metadata: name: nginx-pod spec:containers:- name: nginximages: nginx:1.20以上代码表示创建一个名为nginx-pod的pod资源对象。 Pod运行阶段&#xff1a; Pod创建后&am…

vba:end属性

1.从录制一个宏开始。操作&#xff1a;(ctrl向上键、ctrl向下键、ctrl向左键、ctrl向右键) 2.看代码 Range.End 属性 返回一个 Range 对象&#xff0c;该对象代表包含源区域的区域尾端的单元格。 等同于按键 (End向上键、End向下键、End向左键、End向右键) 语法 表达式.End (…

Java基础(十四):包装类

Java基础系列文章 Java基础(一)&#xff1a;语言概述 Java基础(二)&#xff1a;原码、反码、补码及进制之间的运算 Java基础(三)&#xff1a;数据类型与进制 Java基础(四)&#xff1a;逻辑运算符和位运算符 Java基础(六)&#xff1a;数组 Java基础(七)&#xff1a;面向对…

打包构建优化

最近沉迷逛某蓝色软件&#xff0c;收益良多&#xff01;万分感谢博主 海阔_天空&#xff0c;写的太棒了&#x1f44d;&#x1f389; 下面是原文链接&#xff0c;我在原文的基础上浅做个笔记&#xff0c;方便个人快速复习 PS&#xff1a;本篇文章在评论区里存在很多吐槽技术太…

常见密码的编码

1.base64编码 字符包括字母A-Z、a-z、数字0-9&#xff0c;这样共有62个字符 当看到号的加密方式时&#xff0c;可以考虑base64。例&#xff1a;cTZ1NQ解码之后为q5u5。 bash32 只有大写字母&#xff08;A-Z&#xff09;和数字234567 bash64 只有数字0-9以及大写字母ABCDE…

Java 网络编程之NIO(Channel)

同步 VS 异步 同步 同步编程是指当程序执行某个操作时&#xff0c;它必须等待该操作完成才能继续执行下一个操作。这意味着程序在执行网络请求时必须等待网络请求完成才能继续执行下一步操作&#xff0c;因此同步编程通常会导致程序的性能降低。在网络编程中&#xff0c;同步编…

【分享】免梯子的GPT,玩 ChatGPT 的正确姿势

火了一周的 ChatGPT&#xff0c;HG 不允许还有小伙伴不知道这个东西是什么&#xff1f;简单来说就是&#xff0c;你可以让它扮演任何事物&#xff0c;据说已经有人用它开始了颜色文学创作。因为它太火了&#xff0c;所以&#xff0c;本周特推在几十个带有“chatgpt”的项目中选…

基于YOLOv5的水下海洋目标检测

摘要&#xff1a;水下海洋目标检测技术具有广泛的应用前景&#xff0c;可以用于海洋环境监测、海洋资源开发、海洋生物学研究等领域。本文提出了一种基于 YOLOv5 的水下海洋目标检测方法&#xff0c;使用数据增强方法进行了大量实验&#xff0c;并与其他方法进行了对比&#xf…

postgres 日志级别要设置成 wal_level = logical 的影响? 物理复制和逻辑复制

物理复制和逻辑复制 物理复制和逻辑复制 概念 WAL 区别 逻辑复制 将 PostgreSQL 的日志级别设置为 wal_level logical 会启用逻辑复制&#xff08;logical replication&#xff09;功能&#xff0c;这对于一些应用场景非常有用。 逻辑复制是一种高级的复制技术&#x…

Leetcode.1017 负二进制转换

题目链接 Leetcode.1017 负二进制转换 Rating &#xff1a; 1698 题目描述 给你一个整数 n&#xff0c;以二进制字符串的形式返回该整数的 负二进制&#xff08;base -2&#xff09;表示。 注意&#xff0c;除非字符串就是 "0"&#xff0c;否则返回的字符串中不能含…

ClickHouse小记

1、ClickHouse简介 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用 C 语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用 SQL 查询实时生成分析数据报 告。 官网&a…

该死,面试里怎么有那么多套路,我离字节只有一步之遥

自我介绍 不要想着简历上都有为什么还要自我介绍&#xff0c;这里主要考查的是求职者的表达能力和基本素质。重点体现自己的经历优势以及主动积极的态度。 从业时间&#xff0c;教育背景&#xff0c;工作经验&#xff0c;擅长技能&#xff0c;你的性格。 个人技能&#xff1a…

用BEM和现代CSS选择器控制级联

本文为 360 奇舞团前端工程师翻译原文标题&#xff1a;Taming the Cascade With BEM and Modern CSS Selectors原文作者&#xff1a;Liam Johnston原文地址&#xff1a;https://css-tricks.com/taming-the-cascade-with-bem-and-modern-css-selectors/BEM。就像前端开发领域的所…

免费且好用的ssh工具FinalShell的下载与安装

一、FinalShell介绍 1.1 特色功能 云端同步,免费海外服务器远程桌面加速,ssh加速,本地化命令输入框,支持自动补全,命令历史,自定义命令参数。 1.2 主要特性 1.多平台支持Windows,macOS,Linux&#xff1b; 2.多标签,批量服务器管理&#xff1b; 3.支持登录ssh和Windows远程桌…

页面预加载优化实践

概述在客户端开发中&#xff0c;列表类型页面大多都依赖网络请求&#xff0c;需要等网络数据请求下来后再刷新页面。但遇到网络请求慢的场景&#xff0c;就会导致页面加载很慢甚至加载失败。我负责会员的商品列表页面&#xff0c;在业务场景中&#xff0c;页面元素比较复杂&…

【从零开始学习 UVM】10.2、UVM TLM —— UVM TLM Blocking Put Port

文章目录 UVM TLM Port Example1. 创建一个发送器类,其端口类型为 uvm_blocking_put_port2. 创建一个接收器类,实现 put 方法。3. 在更高层次上连接端口及其实现Put Port 阻塞行为任何组件都可以通过 TLM put port向另一个组件发送事务。接收组件应该定义 put port的实现。这…

KDWS-24便携式六氟化硫气体微量水份测定仪

一、技术特点 (1)自校准&#xff1a;传感器探头可自动校准零点&#xff0c;自动消除因零点、漂移而引入的系统误差&#xff0c;保证每次测量的准确性&#xff0c;同时可免去每年校验的繁琐。 (2)快速省气&#xff1a;开机进入测量状态后每SF6气隔露点测定时间为2min左右。 (3)…