最近在学习爬虫,准备debug,就是点击那个小瓢虫的时候出现了一行错误
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的错误。
|