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

【笔记】修复AttributeError: ‘super‘ object has no attribute ‘__del__‘

#工作记录

一、问题描述

部署人工智能Qlib量化投资平台-CSDN博客

在运行微软开源量化投资Qlib项目结束时程序报以下错误:

Traceback (most recent call last):
  File "F:\PythonProjects\qlib\.venv\Lib\site-packages\joblib\externals\loky\backend\resource_tracker.py", line 181, in __del__
AttributeError: 'super' object has no attribute '__del__'

根据以上错误信息,AttributeError: 'super' object has no attribute '__del__' 是由于在 joblib 的 resource_tracker.py 文件中,某个类的 __del__ 方法错误地调用了 super().__del__(),而基类可能未定义 __del__ 方法导致的。

以下是可能的原因和解决方案:


二、​原因分析

  1. __del__ 方法调用问题
    Python 的 __del__ 方法在对象被垃圾回收时调用,但若基类未定义 __del__,而子类尝试通过 super().__del__() 调用父类的析构函数,就会触发此错误。

  2. 模块导入问题
    如果 resource_tracker.py 中在 __del__ 方法内动态导入了模块(如 import os),而解释器关闭时模块已被卸载,也可能导致类似错误。

  3. joblib 版本兼容性
    旧版本的 joblib 可能存在资源管理逻辑的缺陷,尤其是在多进程或并行计算场景下。

三、修复方法

步骤 1:确认当前安装的 joblib 版本

通过以下命令查看已安装的版本:

pip show joblib

输出示例​:

(base) (.venv) PS F:\PythonProjects\qlib\examples> pip show joblib                                                                                           
Name: joblib
Version: 1.5.0
Summary: Lightweight pipelining with Python functions
Home-page: https://joblib.readthedocs.io
Author:
Author-email: Gael Varoquaux <gael.varoquaux@normalesup.org>
License: BSD 3-Clause
Location: F:\PythonProjects\qlib\.venv\Lib\site-packages
Requires:
Required-by: osqp, pyqlib, scikit-learn
(base) (.venv) PS F:\PythonProjects\qlib\examples>

可以看到当前安装的是1.5.0版本。

此步骤可快速定位当前版本,避免因版本混淆导致的问题。


步骤 2:查询所有可用版本

若需测试或修复版本兼容性问题,可通过以下方式查询所有可用版本:

#指定一个根本不存在的版本,假意进行安装,以从报错输出中查询全部可用版本
pip install joblib==9.9.9

【笔记】Python 开发必备:无需跳转,pip 快速获取包版本的技巧-CSDN博客 

  • 作用​:模拟安装过程,列出所有可用的版本号(即使目标版本不存在)。

PowerShell 7.6.0-preview.4
(base) (.venv) PS F:\PythonProjects\qlib> pip install joblib==9.9.9
ERROR: Could not find a version that satisfies the requirement joblib==9.9.9 (from versions: 0.1a0.dev0, 0.2a0.dev0, 0.3a0.dev0, 0.3.1a0.dev0, 0.3.2.dev0, 0.3.2a0.dev0, 0.3.2b0.dev0, 0.3.2rc0.dev0, 0.3.3a0.dev0, 0.3.3b0.dev0, 0.3.3rc0.dev0, 0.3.4.dev0, 0.3.5.dev0, 0.3.6.dev0, 0.3.7.dev0, 0.4.0.dev0, 0.4.1.dev0, 0.4.2.dev0, 0.4.3.dev0, 0.4.4.dev0, 0.4.5.dev0, 0.4.6.dev0, 0.5.0.dev0, 0.5.0a0.dev0, 0.5.1.dev0, 0.5.2.dev0, 0.5.3.dev0, 0.5.4.dev0, 0.5.5.dev0, 0.5.6.dev0, 0.5.7.dev0, 0.5.7a0.dev0, 0.5.7b0.dev0, 0.5.7, 0.6.0a0, 0.6.0b0, 0.6.0b2, 0.6.0b3, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.7.0a0, 0.7.0b0, 0.7.0rc0, 0.7.1, 0.8.0a0, 0.8.0a2, 0.8.0a3, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.3.post1, 0.8.4, 0.9.0b2, 0.9.0b3, 0.9.0b4, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.10.0, 0.10.2, 0.10.3, 0.11a3, 0.11, 0.12.0, 0.12.1, 0.12.2, 0.12.3, 0.12.4, 0.12.5, 0.13.0, 0.13.1, 0.13.2, 0.14.0, 0.14.1, 0.15.0, 0.15.1, 0.16.0, 0.17.0, 1.0.0, 1.0.1, 1.1.0a0, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.4.0, 1.4.2, 1.5.0)                                                                                                                                                                                                                    
ERROR: No matching distribution found for joblib==9.9.9   

 从输出中可以看到,可用的最新版本是1.5.0版,也就是我当前已经安装过的版本,最临近的版本是1.4.2版(较低版本)。


步骤 3:升级或降级到临近版本
升级到最新版
pip install --upgrade joblib
  • 适用场景​:当前安装的版本号低于最新版时,需要新功能或修复已知问题。
  • 验证​(python环境下):
    import joblib
    print(joblib.__version__)  # 确认版本已更新
降级到临近版本

若当前已安装最新版本(1.5.0)却有此报错,可降级到已知的最临近版本(上个版本是1.4.2):

pip install joblib==1.4.2

 

  • 选择依据​:根据 PyPI 历史记录,1.4.2 是最后一个支持 Python 3.7+ 的稳定版本。
  • 验证​:运行原代码,观察是否修复错误。

可以看到,在重新运行微软开源量化投资Qlib项目结束时,项目已经正常运行,本文开头的报错已消除(修复)。


步骤 4:版本选择建议
版本范围特点适用场景
1.5.0+​最新版,支持并行计算优化、内存映射等新特性需要最新功能的项目
1.4.x稳定版,兼容 Python 3.7+,无重大兼容性问题生产环境或依赖旧 API 的项目
​<1.3.0旧版,可能缺少性能优化,需谨慎使用遗留系统维护

总结

  • 优先升级​:若项目允许,升级到最新版以获取性能改进和安全修复。
  • 降级备用​:若遇到兼容性问题,选择已验证的稳定版本(如 1.4.2)。
  • 环境隔离​:使用虚拟环境避免全局依赖冲突。

通过合理管理 joblib 版本,可有效规避因 API 变更或资源管理缺陷导致的错误。

http://www.xdnf.cn/news/7994.html

相关文章:

  • 解决Qt Creator在Ubuntu环境下运行Qt程序后,程序中无法输入中文
  • MySQL的可重复读事务隔离级别的实现原理
  • leetcode 438. 找到字符串中所有字母异位词
  • Linux `nc` 命令详细讲解
  • vue3:十四、角色权限管理-表格引入-树形表格
  • Axure系统原型设计列表版方案
  • BERT框架:自然语言处理的革命性突破
  • PostgreSQL 14 pacemaker 高可用集群
  • czml数据以及应用
  • uniapp打包报错:重新在manifest.json中生成自己的APPID
  • MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决
  • Android 网络全栈攻略(三)—— 从三方库原理来看 HTTP
  • 代码走读 Go 语言 Map 的实现
  • MAX96752FGTN/V+T:双LVDS(OLDI)输出的GMSL2解串器架构与应用探讨——汽车与工业视频传输方案深度分析
  • 新能源汽车移动充电服务:如何通过智能调度提升充电桩可用率?
  • 从零基础到最佳实践:Vue.js 系列(9/10):《单元测试与端到端测试》
  • Elasticsearch 分页查询的 from+size 有什么缺陷?如何优化深度分页?比较scroll API与search_after的差异
  • 软考中级软件设计师——设计模式篇
  • window 显示驱动开发-指定 GDI 硬件加速渲染操作
  • WebRTC:实时通信的未来之路
  • redis搭建最小的集群,3主3从
  • Android-ViewModel+LiveData学习总结
  • Python爬虫实战:研究Grab 框架相关技术
  • HTTP Digest 认证:原理剖析与服务端实现详解
  • 如何开发一个MCP Server
  • Google机器学习实践指南(梯度下降篇)
  • 关于pgSQL配置后Navicat连接不上的解决方法
  • JAVA开发工具延长方案
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告
  • MySql添加非空字段时的“伪空”问题