处理 Python 3.11 弃用的 PySys_SetPath 和 Py_SetProgramName

news2024/9/20 22:32:15

在C++调用matplotlibcpp.h画图时报错,使用的python版本是3.11.3版本。

在这里插入图片描述

解决方案:不重要的话,注释该行代码即可。

Python 3.11 弃用 PySys_SetPath 和 Py_SetProgramName。这
PyConfig API 取代了这些功能和其他功能。此提交使用
PyConfig API 提供(希望)等效的功能,同时
还保留对旧版本 Python 的支持,即那些
Python 3.8 之前。

Fedora Rawhide 中提供了 Python 3.11 的测试版。两个都
Fedora 35和Fedora 36使用Python 3.10,而Fedora 34仍然使用
Python 3.9。我已经在 Fedora 34、Fedora 36 和
生皮,尽管由于以下原因无法对生皮进行完整测试
一个内核错误。既然如此,我决定启用较新的
PyConfig API 通过针对 0x030a0000 测试 PY_VERSION_HEX。这
对应于 Python 3.10。

我们可以尝试在 Python 3.8 版本中使用新的 API,
但我不愿意这样做,因为可能与 PyConfig 相关
早期版本中的错误已被修复。最近的linux
发行版应包括对 Python 3.10 的支持。这应该是
足以测试新的 Python 初始化代码
GDB。

有关 PyConfig API 的信息以及背后的动机
弃用旧界面可以在这些链接中找到:

https://github.com/python/cpython/issues/88279
https://peps.python.org/pep-0587/
https://docs.python.org/3.11/c-api/init_config.html

gdb/python/python-internal.h | 5 +++++
gdb/python/python.c | 43 +++++++++++++++++++++++++++++++++++++++±-
更改了 2 个文件,插入了 46 个(+),删除了 2 个(-)

diff --git a/gdb/python/python-internal.hb/gdb/python/python-internal.h
索引 5ff9989af83…3dae4e13a4c 100644
—a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -177,6 +177,10 @@ gdb_PySys_GetObject (const char *name)

#define PySys_GetObject gdb_PySys_GetObject

+/* PySys_SetPath 在 Python 3.11 中已弃用。禁用已弃用的

  • Python 3.10 及更高版本的代码。*/
    +#if PY_VERSION_HEX < 0x030a0000

/* PySys_SetPath 的 ‘path’ 参数缺少 ‘const’ 限定符
Python 3.6 之前。因此,我们将其包装在一个函数中以避免错误
当使用 -Werror 编译时。*/
@@ -190,6 +194,7 @@ gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *路径)
}

#define PySys_SetPath gdb_PySys_SetPath
+#endif

/* 包装 PyGetSetDef 以允许使用字符串方便地构造
文字。不幸的是,PyGetSetDef 的“名称”和“文档”成员
diff --git a/gdb/python/python.cb/gdb/python/python.c
索引 8f526bba84e…ce42c59f1ae 100644
— a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -2001,16 +2001,44 @@ do_start_initialization ()
}
setlocale(LC_ALL, oldloc.c_str());

  • /* Py_SetProgramName 在 Python 3.11 中已弃用。使用PyConfig
  • Python 3.10 及更新版本的机制。/
    +#if PY_VERSION_HEX < 0x030a0000
    /
    请注意,Py_SetProgramName 需要传递给它的字符串
    在程序执行期间保持活动状态,因此
    调用后它没有被释放。*/
    Py_SetProgramName (progname_copy);
  • /* 将 _gdb 定义为内置模块。*/
    PyImport_AppendInittab(“_gdb”, init__gdb_module);
    -#万一
  • Py_Initialize();
    +#else

  • PyStatus 状态;

  • PyConfig 配置;

  • PyConfig_InitPythonConfig (&配置);

  • status = PyConfig_SetString (&config, &config.program_name, progname_copy);

  • config.write_bytecode = !Py_DontWriteBytecodeFlag;

  • config.use_environment = !python_ignore_environment;

  • if (!PyStatus_Exception (status))

  • 状态 = PyConfig_Read (&config);

  • /* 将 _gdb 定义为内置模块。*/

  • if (PyImport_AppendInittab (“_gdb”, init__gdb_module) == -1)

  • 返回假;

  • if (!PyStatus_Exception (status))

  • 状态 = Py_InitializeFromConfig (&config);

  • PyConfig_Clear (&配置);

  • if (PyStatus_Exception (status))

  • 返回假;
    +#endif
    +#else
    Py_Initialize();
    +#endif

#如果 PY_VERSION_HEX < 0x03090000
/* PyEval_InitThreads 在 Python 3.9 中被弃用,并将
在 Python 3.11 中被删除。在 Python 3.7 之前,这个调用是
@@ -2317,12 +2345,23 @@ do_initialize (const struct extension_language_defn *extlang)

sys_path = PySys_GetObject (“路径”);

  • /* PySys_SetPath 在 Python 3.11 中被弃用。禁用此功能
  • Python 3.10 及更新版本的弃用代码。另请注意,这
  • ifdef 通过以下方式消除了 sys.path 的潜在初始化
  • PySys_SetPath。我(kevinb)对 PEP 587 的理解表明
  • 由于 module_search_paths 是不必要的
  • 在任何 PyConfig 之后初始化为一个空列表
  • 初始化函数。如果确实证明某种
  • 初始化仍然需要,应该添加到
  • do_start_initialize() 中基于 PyConfig 的初始化。/
    +#if PY_VERSION_HEX < 0x030a0000
    /
    如果 sys.path 尚未定义,请先定义它。*/
    如果 (!(sys_path && PyList_Check (sys_path)))
    {
    PySys_SetPath(L"");
    sys_path = PySys_GetObject (“路径”);
    }
    +#endif
    如果(sys_path && PyList_Check(sys_path))
    {
    gdbpy_ref<> pythondir(PyUnicode_FromString(gdb_pythondir.c_str()));

    2.36.1

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

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

相关文章

深入理解深度学习——GPT(Generative Pre-Trained Transformer):基础知识

分类目录&#xff1a;《深入理解深度学习》总目录 《深入理解深度学习——Transformer》系列文章介绍了Transformer&#xff0c;该模型最初被用于机器翻译任务&#xff0c;其出色表现引起了学术界的极大兴趣&#xff0c;其优异的特征提取与语义抽象能力得到了学者的广泛认可&am…

企业做seo有什么好处?SEO 为您的企业带来的 10 大主要优势?

如果您希望建立长期的品牌知名度、扩大目标受众并赚取更多收入&#xff0c;那么搜索引擎优化至关重要。让我们看看 SEO 为您的企业带来的 10 大好处&#xff0c;以及如何实现它们。 1. 它提高了你的可信度 在搜索引擎结果页面上排名靠前的网站通常被搜索引擎认为是高质量和值得…

【unity细节】—怎么将unity编译时和运行时的功能隔开

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐怎么将unity编译时和运行时的功能隔开的问题⭐ 文章目录 ⭐怎么将unity编译时和…

TCP的十个核心机制

目录 前言一 到 三四. 滑动窗口五. 流量控制六. 拥塞控制七. 延时应答八. 捎带应答九. 面向字节流十. 异常处理总结 前言 TCP协议是传输层的重点协议, 负责将数据从发送端传输到接收端. TCP协议是传输控制协议, 顾名思义也就是对数据的传输进行控制的协议. TCP 协议有很多, 我…

android存储3--初始化.unlock事件的处理

android版本&#xff1a;android-11.0.0_r21http://aospxref.com/android-11.0.0_r21 概述&#xff1a;收到unlock事件后&#xff0c;StorageSessionController、vold、storaged模块进行各自初始化操作。 一、StorageManagerService::onUnlockUser处理unlock事件 设备解锁后…

openlayers瓦片的使用

OpenLayers是一个用于WebGIS客户端的地图开发库&#xff0c;支持多种地图。在使用瓦片时&#xff0c;先将自己需要的瓦片下载&#xff0c;下载好的瓦片会分层&#xff0c;越高的层级瓦片的数量余额多。 使用时可以引入 ol.js 文件&#xff0c;和 ol.css 文件&#xff0c;或者使…

机器学习 | 实验五:LDA

LDA的思想&#xff1a;“投影后类内方差最小&#xff0c;类间方差最大”。即数据在低维度上进行投影&#xff0c;投影后希望每一种类别数据的投影点尽可能的接近&#xff0c;而不同类别的数据的类别中心之间的距离尽可能的大。 假设我们有两类数据分别为红色和蓝色&#xff0c;…

关于socket编程中FD_XXX以及select函数的理解

文章目录 01 | 宏接口定义02 | 使用方法03 | 服务端代码示例 学习socket编程的时候看到很多FD开头的宏定义和函数&#xff0c;这里记录一下这些宏定义和函数的含义及处理流程 01 | 宏接口定义 fd_set fd_set 是一种表示文件描述符的集合类型&#xff0c;在socket编程中&#xf…

计算机网络——自顶向下方法(第三章学习记录)

本章学习运输层 运输层位于应用层和网络层之间&#xff0c;是分层的网络体系的重要部分&#xff0c;该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能。从应用程…

CSS3-补充-伪元素

伪元素 作用&#xff1a;在网页中创建非主体内容&#xff0c;开发中常用CSS创建标签&#xff0c;比如装饰性的不重要的小图 区别&#xff1a; 1 元素&#xff1a;HTML 设置的标签 2 伪元素&#xff1a;由 CSS 模拟出的标签效果 …

EMC学习笔记(七)阻抗控制(一)

阻抗控制&#xff08;一&#xff09; 1.特征阻抗的物理意义1.1 输入阻抗1.2 特征阻抗1.3 偶模阻抗、奇模阻抗、差分阻抗 2.生产工艺对阻抗控制的影响 1.特征阻抗的物理意义 1.1 输入阻抗 在集总电路中&#xff0c;输入阻抗是经常使用的一个术语 &#xff0c;它的物理意义是: …

FreeRTOS实时操作系统(六)列表与列表项

系列文章目录 文章目录 系列文章目录简要概念列表列表项迷你列表项 相关API函数初始化列表列表项初始化列表项插入&#xff08;升序&#xff09;末尾列表项插入列表项删除 实战实验 简要概念 列表是 FreeRTOS 中的一个数据结构&#xff0c;概念上和链表有点类似&#xff0c;列…

ubuntu环境下测试硬盘读写速度

在Ubuntu下&#xff0c;可以使用hdparm、dd和fio等工具来测试硬盘的读写速度。 开始之前&#xff0c;先使用sudo fdisk -l命令来列出系统中所有的硬盘和分区&#xff1a; 1.使用hdparm测试硬盘读取速度&#xff1a; 安装hdparm&#xff1a; sudo apt-get install hdparm 通…

C++17中utf-8 character literal的使用

一个形如42的值被称作字面值常量(literal),这样的值一望而知。每个字面值常量都对应一种数据类型&#xff0c;字面值常量的形式和值决定了它的数据类型。 由单引号括起来的一个字符称为char型字面值&#xff0c;双引号括起来的零个或多个字符则构成字符串型字面值。 字符串字面…

9.QT 三目运算符

上面引出两个新的概念&#xff1a; 左值&#xff1a;能被赋值的就是左值。 右值&#xff1a;不能被赋值的就是右值。

基於ranger,kerberos,hadoop ha 配置hvie多用戶

基於ranger&#xff0c;kerberos&#xff0c;hadoop ha 配置hvie多用戶 hive多用戶權限管理一、hive的管理員用戶二、hive配置普通用戶1.添加用戶2.配置kerberos2.1 创建主体2.2 生成keytab文件2.3 修改keytab文件所有者(可做可不做) 3. 配置windows hive多用戶權限管理 一、h…

English Learning - L3 综合练习 8 TED-Living Beyond the Limits 2023.06.21 周三

English Learning - L3 综合练习 8 TED-Living Beyond the Limits 2023.06.21 周三 句 1句 2扩展 句 3句 4句 5句 6句 7扩展 random 句 8扩展 句 9句 10句 11句 12句 13句 14句 15句 16句 17句 18句 19句 20句 21句 22句 23 句 1 Four months later I was back up on a snowbo…

SVN使用步骤

1.基本操作 2.提交之间看一下变更内容 3.显示日志 是查看所有提交的记录4.撤销和恢复操作 撤销本地修改 或者点击提交的时候 还原 把修改的撤销掉 第二种情况,内容已经提交上去了点击提交日志 进行操作 只是撤销了本地 接着还需要继续提交到服务端 第三种情况 我们需要恢…

Linux系统之安装showdoc文档工具

Linux系统之部署showdoc文档工具 一、showdoc介绍1.1 showdoc简介1.2 showdoc功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查本地yum仓库状态 四、安装httpd服务4.1 安装httpd4.2 启动httpd服务…

用Visual C++写出你第一个Windows程序

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来看看如何用Visual C写出你第一个Windows程序。 与其看很多Windows的书&#xff0c;不如先自己动手写一个Windows程序。由于Windows程序的特有机制&#xff0c;不建议去写那种简单的HELLO WORLD&#x…