最近在学习爬虫,准备debug,就是点击那个小瓢虫的时候出现了一行错误

ImportError: cannot import name 'namedtuple' from partially initialized module 'collections' (most likely due to a circular import)

ImportError: cannot import name 'namedtuple' from partially initialized module 'collections' (most likely due to a circular import)

就是说有循环的导入。

循环导入是什么?

a.py

from b import b01


def a01:
    pass

print('我是a,我引入了b')

b.py

form a import a01


def b01:
    pass

print('我是b,我引入了a')

这种就是循环引入,类似于要一颗蛋需要一只鸡,要一只鸡需要一颗蛋的问题,系统不知道先给你鸡还是先给你蛋,就会报错。

排查步骤

先说结论,绝大部分就是因为开发者用了Python内置的一些关键词来命名py文件了。

 我这个,以log中出现的自己写的代码行(图中马赛克那行)为界,将log分为上下两部分。箭头的地方这三个区域要特别注意,你的py文件名字一定别和他们重名。

我的错误很明显,就是我的一个文件命名为了keyword文件,和Python库自带的keyword文件冲突了。所以会报错。

解决方案就是将上图log中自己的代码行在的py文件(第二部分的第一行的文件)重新命名就可以了。

原因

我自己的keyword文件的import关系是这样的(a→b表示引入a import b)

我的keyword文件 → json → decoder → re → functools → collecitons → 系统的keyword文件

简写就是

我的keyword → collections → 系统的keyword

由于俩文件重名,导致开发环境无法区别,就会报出most likely due to a circular import的错误。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐