You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入collections的Counter报错 分析matplotlib代码库出现循环导入问题

报错根本原因

1. 模块命名冲突触发导入优先级错误

Python导入模块时会优先查询当前运行脚本所在的目录,你将自己写的analyse_code.py放在了matplotlib的官方安装目录/usr/local/lib/python3.9/site-packages/matplotlib/下,而该目录刚好存在matplotlib自带的collections.py文件。当你执行from collections import Counter时,Python没有加载标准库的collections模块,反而优先匹配到了同目录下的matplotlib自有collections.py。

2. 循环导入链路触发最终报错

matplotlib的collections.py加载时会依赖numpy,numpy依赖json模块,json依赖re正则模块,re又依赖functools模块,而functools的底层需要从标准库collections中导入namedtuple。此时Python检测到名为collections的模块已经处于半加载状态(就是还没加载完的matplotlib自有collections.py),该模块中既没有namedtuple也没有Counter,因此抛出了循环导入相关的报错。

解决办法
  • 将你编写的analyse_code.py从matplotlib的安装目录中移出,放到独立的、和第三方库安装路径无关的自定义项目目录下运行,即可直接解决冲突
  • 日常开发时不要给自建的Python脚本起和标准库重名的名称(比如不要命名为collections.py、re.py、json.py等),也不要将自定义脚本放在第三方库的安装目录下,避免触发导入优先级问题
  • 若特殊场景下确实无法规避重名,可以通过指定绝对导入路径加载标准库模块,该方案仅作为极端场景的备用选择。

内容的提问来源于stack exchange,提问作者Herman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:06