PyTorch导入SummaryWriter触发循环导入ImportError问题问询
报错根因
这是典型的自定义模块名遮蔽第三方包导致的循环导入,从报错栈第一行就能定位问题:你的项目目录下存在自己创建的tensorboard.py文件,和安装的tensorboard第三方包完全重名。
Python导入模块时会优先搜索当前脚本所在的项目目录,因此当torch.utils.tensorboard内部执行import tensorboard语句时,加载的不是环境里安装的官方tensorboard包,而是你自己写的这个tensorboard.py。而你的tensorboard.py里又在反向导入torch.utils.tensorboard里的SummaryWriter,两个模块互相等待对方初始化完成,就触发了循环导入报错。
另外从报错路径能看到当前运行的torch来自Python3.8的系统包目录,和你配置的Python3.9环境不匹配,说明PyCharm的解释器选错了,属于次要配置问题。
修复步骤
- 把项目里的
tensorboard.py改成其他不重名的文件名,比如train_log.py、tb_demo.py都行,不要和任何已安装的第三方包重名。 - 删掉项目目录下的
__pycache__文件夹,清除之前导入生成的.pyc缓存,避免旧缓存导致报错复现。 - 打开PyCharm的解释器设置,确认当前选中的Python解释器是你装了Python3.9、对应版本torch和tensorboard的虚拟环境,不要用系统全局的Python3.8。
- 重启PyCharm的运行控制台,重新执行代码即可。
校验方式
修复后可以先执行下面两行代码验证导入路径是否正确:
import tensorboard print(tensorboard.__file__)
如果输出路径是虚拟环境下的site-packages/tensorboard/__init__.py,不是你项目目录下的文件,就说明模块遮蔽问题已经解决。
内容的提问来源于stack exchange,提问作者Y_H
相关产品推荐
相关产品推荐

