ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘

当在Python3.7及以上版本中使用timm库时,遇到从typing导入OrderedDict的错误。解决方法是将torchvision.models.maxvit.py文件中从typing导入OrderedDict改为从collections导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用timm时

from timm.models.vision_transformer import Block

遇到报错:

"xxx/lib/python3.7/site-packages/torchvision/models/maxvit.py", line 3, in <module>
from typing import Any, Callable, List, Optional, OrderedDict, Sequence, Tuple
ImportError: cannot import name 'OrderedDict' from 'typing' (xxx/lib/python3.7/typing.py)

解决方案

思路:在Python 3.7及更高版本中,OrderedDict已经作为标准库中的collections模块的一部分,无需再从typing_extensions导入。
因此具体解决方案是:

1. 进入到报错文件,定位第3行

文件xxx/lib/python3.7/site-packages/torchvision/models/maxvit.py

第3行:

from typing import Any, Callable, List, Optional, OrderedDict, Sequence, Tuple

2. 使用标准库 collections 中的 OrderedDict 类

改为如下两行

from typing import Any, Callable, List, Optional, Sequence, Tuple
from collections import OrderedDict
当你在Anaconda环境中遇到`ImportError: cannot import name OrderedDict from typing`的问题,这通常是因为你正在尝试导入Python标准库中的`collections.OrderedDict`,而这个功能实际上已经在`typing`模块中被弃用了。如果你需要`OrderedDict`的功能,你可以直接从`collections`模块导入,而不是`typing`。 下面是解决步骤: 1. 确认版本:首先检查你的`collections`模块是否包含`OrderedDict`。在命令行或Jupyter Notebook中输入`import collections; print(dir(collections))`,看`OrderedDict`是否存在。 2. 导入修正:如果`OrderedDict`存在,你可以直接使用`collections.OrderedDict`,例如: ```python from collections import OrderedDict ``` 3. 如果提示`collections`里没有`OrderedDict`,那可能是你安装的Python版本过旧,没有包含`collections.OrderedDict`,在这种情况下,升级到支持`OrderedDict`的Python版本(如Python 3.7及以上)。 4. 检查环境:确认你的虚拟环境已设置正确,Anaconda默认环境下`collections`应该包含`OrderedDict`,如果不是,则可能需要重新创建一个新环境,并确保其包含了正确的Python版本及必要的库。 5. 清理缓存:有时候,由于缓存问题也可能导致此类导入错误,可以试试清除Python的元数据缓存(如有必要): ```bash conda env update --clear --name your_env_name ``` 如果上述操作仍然无法解决问题,可能是第三方包冲突或者环境配置问题,这时建议检查一下依赖项并清理不必要的软件包。同时,更新到最新版本的Anaconda可能有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值