Skip to content

Python 3.11 运行 timm 0.6.12 时的 ImportError 解决方案

我遇到的错误

ValueError: mutable default <class 'timm.models.maxxvit.MaxxVitConvCfg'> for field conv_cfg is not allowed: use default_factory

我的解决方案

直接升级到1.x.x

pip install -U timm

以下是根据您提供的链接内容提取和润色后的文档内容:

问题描述

在 Python 3.11 环境下安装了 timm 0.6.12 后,尝试导入 timm 时会遇到以下错误:

ValueError: mutable default <class 'timm.models.maxxvit.MaxxVitConvCfg'> for field conv_cfg is not allowed: use default_factory

错误原因

该错误是由于 Python 3.11 对 dataclass 的默认值处理方式发生了变化。具体来说,dataclass 不再允许使用可变对象(如类实例)作为默认值,而是要求使用 default_factory 来提供默认值。

解决方案

根据 Hugging Face 的官方 issue 提供的解决方案,可以通过修改 timm 的源代码来解决此问题。

修改步骤

  1. 找到 timm 的安装路径,定位到 models/maxxvit.py 文件。
  2. 打开 maxxvit.py 文件,进行以下修改:
  3. 在第 42 行,添加 field 的导入:

    from dataclasses import dataclass, replace, field
    
  4. 修改第 232 和 233 行,将原来的代码:

    conv_cfg: MaxxVitConvCfg = MaxxVitConvCfg()
    transformer_cfg: MaxxVitTransformerCfg = MaxxVitTransformerCfg()
    

    改为:

    conv_cfg: MaxxVitConvCfg = field(default_factory=MaxxVitConvCfg)
    transformer_cfg: MaxxVitTransformerCfg = field(default_factory=MaxxVitTransformerCfg)
    
  5. 保存文件并重新运行代码。

参考链接

通过上述修改,可以解决 Python 3.11 环境下 timm 0.6.12 的导入问题。如果问题仍然存在,建议检查其他相关依赖或更新到最新版本的 timm

Ref

https://blog.csdn.net/u012796629/article/details/134676432