ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘ 问题解决

ImportError: cannot import name 'OrderedDict' from 'typing' 问题解决

bash 复制代码
运行model.py时报错了
E:\004---CSDN_resource>C:\Users\cxx\anaconda3\Scripts\activate && conda activate python37

(python37) E:\004---CSDN_resource>C:\Users\cxx\anaconda3\envs\python37\python.exe e:/004---CSDN_resource/02_resnet50_image_classification/model.py
Traceback (most recent call last):
  File "e:/004---CSDN_resource/02_resnet50_image_classification/model.py", line 3, in <module>
    from torchvision import models
  File "C:\Users\cxx\anaconda3\envs\python37\lib\site-packages\torchvision\__init__.py", line 5, in <module>
    from torchvision import datasets, io, models, ops, transforms, utils
  File "C:\Users\cxx\anaconda3\envs\python37\lib\site-packages\torchvision\models\__init__.py", line 16, in <module>
    from .maxvit import *
  File "C:\Users\cxx\anaconda3\envs\python37\lib\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' (C:\Users\cxx\anaconda3\envs\python37\lib\typing.py)

(python37) E:\004---CSDN_resource>

这个报错非常关键,而且你其实已经踩到了一个"版本地雷" 。

结论我先给你:

❌ 不是你的 model.py 写错了

❌ 也不是 ResNet50 的问题

✅ 是 Python 3.7 + torchvision 版本不兼容导致的

下面我一步一步把原因、判断依据、以及最稳妥的解决方案给你讲清楚,你也可以把这段内容整理进博客,作为"真实踩坑记录"。


文章目录

    • [ImportError: cannot import name 'OrderedDict' from 'typing' 问题解决](#ImportError: cannot import name 'OrderedDict' from 'typing' 问题解决)
    • 一、报错本质是什么?
      • [关键点 🔍](#关键点 🔍)
    • [二、为什么"你什么都没用 maxvit,却还是报错?"](#二、为什么“你什么都没用 maxvit,却还是报错?”)
    • 三、你的环境组合为什么"必炸"
    • [四、最稳妥的 3 种解决方案(按推荐顺序)](#四、最稳妥的 3 种解决方案(按推荐顺序))
      • [✅ 方案一(强烈推荐):单独为资源②建 Python 3.8 环境](#✅ 方案一(强烈推荐):单独为资源②建 Python 3.8 环境)
        • [1️⃣ 新建环境](#1️⃣ 新建环境)
        • [2️⃣ 安装匹配版本(CPU 版即可)](#2️⃣ 安装匹配版本(CPU 版即可))
        • [3️⃣ 再运行 model.py](#3️⃣ 再运行 model.py)
      • [⚠️ 方案二(不推荐,但可用):强行降级 torchvision](#⚠️ 方案二(不推荐,但可用):强行降级 torchvision)
      • [❌ 方案三(不建议):改 torchvision 源码](#❌ 方案三(不建议):改 torchvision 源码)
    • 五、你现在该怎么选?(给你一个"资源作者级建议")

一、报错本质是什么?

你的核心报错是这一句:

复制代码
ImportError: cannot import name 'OrderedDict' from 'typing'

而它出现在这里:

复制代码
torchvision\models\maxvit.py
from typing import Any, Callable, List, Optional, OrderedDict, Sequence, Tuple

关键点 🔍

  • OrderedDict 不属于 typing 模块(Python 3.7)
  • 它属于 collections 或 typing_extensions
  • 但 新版 torchvision 假设你使用的是较新的 Python

👉 也就是说:你现在的 Python 版本,已经"跟不上"你装的 torchvision 了。


二、为什么"你什么都没用 maxvit,却还是报错?"

这是一个非常容易让人迷糊的地方。

你写的是:

python 复制代码
from torchvision import models

但实际上 torchvision 内部会:

python 复制代码
import torchvision.models.maxvit

也就是说:

哪怕你只想用 ResNet50,只要 torchvision 版本偏新,它就会加载 maxvit。

而 maxvit 是 Python ≥ 3.8 时代的模型。


三、你的环境组合为什么"必炸"

你现在的关键信息是:

  • Python:3.7
  • Torch:1.13.x
  • Torchvision:0.14+(隐含)

这是一个不安全组合。

官方兼容关系(简化版)

Python Torch Torchvision 结论
3.7 ≤1.10 ≤0.11 ✅ 稳定
3.7 1.12 / 1.13 0.13 / 0.14 ❌ 高概率炸
≥3.8 1.13 0.14 ✅ 稳定

👉 你正好处在"官方已经不太照顾"的区间。


四、最稳妥的 3 种解决方案(按推荐顺序)

✅ 方案一(强烈推荐):单独为资源②建 Python 3.8 环境

这是工程上最干净、博客里也最合理的方案。

1️⃣ 新建环境
bash 复制代码
conda create -n resnet50_py38 python=3.8 -y
conda activate resnet50_py38
2️⃣ 安装匹配版本(CPU 版即可)
bash 复制代码
pip install torch==1.13.1 torchvision==0.14.1

如果你后面要讲 GPU,可以再单独开一篇博客,不要现在纠缠。

3️⃣ 再运行 model.py
bash 复制代码
python model.py

✅ 问题会直接消失


⚠️ 方案二(不推荐,但可用):强行降级 torchvision

如果你必须留在 Python 3.7(比如资源①已经这样),那就:

bash 复制代码
pip uninstall torchvision -y
pip install torchvision==0.11.3

并且 Torch 最好一起降:

bash 复制代码
pip install torch==1.10.2 torchvision==0.11.3

📌 缺点:

  • ResNet50 还能用
  • 但你未来写博客会一直受版本限制
  • 不利于后续资源扩展

❌ 方案三(不建议):改 torchvision 源码

网上有人会教你:

python 复制代码
from collections import OrderedDict

然后改 maxvit.py。

⚠️ 这是非常不专业的做法,也不适合教学资源。


五、你现在该怎么选?(给你一个"资源作者级建议")

站在你现在这个阶段,我明确建议你:

资源①(模板) :

允许 Python 3.7,偏"基础工程"
资源②(ResNet50 实战) :

👉 升级到 Python 3.8,作为"进阶实战"

这在博客里反而是一个加分点,你可以这样写:

"从这个资源开始,我建议使用 Python 3.8,这是当前 PyTorch 工程更主流、也更稳定的选择。"

相关推荐
海天一色y5 小时前
模型部署的「通用语」:ONNX 转换
pytorch·onnx
Thomas.Sir12 小时前
第26课:工业零部件外观缺陷检测系统:从学术Demo到产线工程的重构实战
pytorch·ai
Zguigo1 天前
【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行
人工智能·pytorch·深度学习
论文复现现场2 天前
RTX 3090 24GB 适合科研吗?单卡论文复现、PyTorch 显存检查与 OOM 排错
人工智能·pytorch·python·深度学习·cuda·rtx3090
论文复现现场2 天前
AutoDL、算家云与公有云 GPU 怎么选?环境复现、计费与断点恢复对比
pytorch·深度学习·云计算·gpu
盘古开天16662 天前
PPO算法代码实战(三):PyTorch从零实现PPO求解CartPole
人工智能·pytorch·算法
Είναι η κοπέλα3 天前
PyTorch 安装与验证
人工智能·pytorch·python
盼小辉丶3 天前
PyTorch强化学习实战(27)——进化策略在强化学习中的应用
人工智能·pytorch·深度学习·强化学习
weixin_447195293 天前
【无标题】
pytorch·python
bigdata-余建新3 天前
week2
人工智能·pytorch·深度学习