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

【笔记】修复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 变更或资源管理缺陷导致的错误。

相关文章:

  • Qwen3技术报告笔记
  • NLP学习路线图(四):Python编程语言
  • # 深入解析BERT自然语言处理框架:原理、结构与应用
  • 基于 ZU49DR FPGA 的无线电射频数据采样转换开发平台核心板
  • Java 大视界 -- 基于 Java 的大数据分布式存储在视频会议系统海量视频数据存储与回放中的应用(263)
  • 基于SpringBoot的美食分享平台设计与开发(Vue MySQL)
  • macOS专业用户远程操作全场景优化指南:开发运维协同、安全合规与性能提升实战
  • Spring Cloud Gateway高并发限流——基于Redis实现方案解析
  • 梳理Spring Boot中三种异常处理
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • 一台机器怎么部署k8s集群
  • 实现FAT12文件管理
  • 我爱学算法之—— 二分查找(中)
  • 小米2025年校招笔试真题手撕(一)
  • 【数据结构与算法】LeetCode 每日三题
  • 小米15周年战略新品发布会:多领域创新突破,构建科技生态新蓝图
  • Spring核心原理:动态数据源切换的企业级解决方案
  • java(基础)面向对象
  • CentOS7/Ubuntu SSH配置允许ROOT密码登录
  • 英语学习5.21
  • 免费网页源代码网站/天津网站快速排名提升
  • 装修公司企业网站开发规划/百度快照是什么
  • 网站切片 做程序/免费站推广网站2022
  • 怎么用linux做网站服务器/产品销售推广方案
  • 局机关门户网站建设情况汇报/电商平台怎么推广
  • wordpress全站源码/台州关键词优化推荐