
当项目中存在名为 torch 的本地文件夹时,Python 会优先导入该文件夹而非官方 PyTorch 库,导致 ModuleNotFoundError: No module named 'torch.utils' —— 实际是命名冲突引发的假性缺失错误。
当项目中存在名为 `torch` 的本地文件夹时,python 会优先导入该文件夹而非官方 pytorch 库,导致 `modulenotfounderror: no module named 'torch.utils'` —— 实际是命名冲突引发的假性缺失错误。
在 PyTorch 开发中,torch.utils(如 torch.utils.data, torch.utils.tensorboard)是核心子模块,正常安装 PyTorch 后即自动可用。但当你遇到 ModuleNotFoundError: No module named 'torch.utils',而 pip show torch 显示 PyTorch 已正确安装、甚至 import torch; print(torch.__version__) 能成功执行时,问题极大概率并非环境配置错误,而是本地命名冲突。
最常见也最容易被忽视的原因是:你的项目目录下(或 Python 模块搜索路径中的任意位置)存在一个名为 torch/ 的文件夹(例如 ./torch/__init__.py 或空文件夹)。由于 Python 的模块导入机制遵循 “先找到即导入” 原则,解释器会将该同名文件夹识别为 torch 包,从而跳过已安装的 torch 第三方库。此时 import torch 可能看似成功(实际导入的是空/不完整/损坏的本地 torch 文件夹),但 torch.utils 等子模块自然不存在,触发报错。
✅ 快速诊断方法:
在报错环境的 Python 交互终端中运行:
import torch print(torch.__file__)
若输出路径指向你项目内的 ./torch/__init__.py 或类似本地路径(而非类似 site-packages/torch/__init__.py),即可确认冲突。
✅ 根本解决方案:
立即重命名冲突文件夹——任何非 torch 的名称均可,例如:
# 在项目根目录执行(Windows/Linux/macOS 均适用) ren torch torch_custom # Windows # 或 mv torch torch_lib # Linux/macOS
重命名后,彻底清除 Python 缓存(避免 .pyc 文件干扰):
# 删除所有 __pycache__ 和 .pyc 文件
find . -name "__pycache__" -type d -exec rm -rf {} +
find . -name "*.pyc" -delete
然后重新运行训练命令:
python3 train_ssd.py --dataset-type=voc --data=data/MedModel/ --model-dir=models/MedModel --batch-size=2 --workers=3 --epochs=500
⚠️ 重要提醒:
- 不要使用
torch、numpy、cv2、PIL等任何主流包名作为本地文件夹或 Python 文件名(如torch.py同样会导致import torch失败); - 创建虚拟环境虽有助于隔离依赖,但无法规避同名文件夹的导入优先级问题;
- 在 VS Code 或 PyCharm 中,务必检查文件资源管理器是否意外创建了
torch/文件夹(例如误操作新建文件夹并命名为torch); - 若使用
sys.path.insert(0, ...)手动添加路径,请确保不把含torch/的目录前置。
该问题本质是 Python 导入机制的确定性行为,而非 PyTorch 安装缺陷。修复后,torch.utils.data.DataLoader、torch.utils.tensorboard.SummaryWriter 等功能将立即恢复正常调用。











