Python3.8模块命名导致循环引⽤问题描述:
今天写代码的时候遇到这样⼀个问题:
1Fatal Python error: init_import_size: Failed to import the site module
2Python runtime state: initialized
3Traceback (most recent call last):
4  File "C:\Users\cc\AppData\Local\Programs\Python\Python38-32\lib\site.py", line 73, in <module>
5    import os
6  File "C:\Users\cc\AppData\Local\Programs\Python\Python38-32\lib\os.py", line 27, in <module>
7    import stat as st
8  File "D:\jenkinstemp\test\stat.py", line 3, in <module>
9    for root, dirs, files in os.walk("plugins", topdown=False):
10AttributeError: partially initialized module 'os' has no attribute 'walk' (most likely due to a circular import)
使⽤的 interpreter版本是3.8。点击traceback中的链接
先查看site.py
这个模块根据注释是⽤来添加三⽅库的搜索路径到sys.path中,看⼀下site.py的第七⼗三⾏,
再看⼀下os.py的第27⾏,
明眼⼈看出来了,这⾥有⼀个stat模块,我们报错的⽂件也叫stat.py
我们打印⼀下sys.path⾥⾯的值
我们看到sys.path的值是⼀个列表。当前的项⽬路径在列表的⾸端。⽽项⽬
所以这⾥合理的解释就是在运⾏项⽬下⾯的stat.py的时候,解释器⾸先会准备模块的搜索路径,运⾏site.py⽂件,site.py⽂件import了os 模块,os模块⼜引⽤了stat模块,这个模块应该是在python安装⽬录下⾯的Lib⽂件夹⾥⾯,但是因为当前路径的搜索优先度⾼于python 安装⽬录下⾯的⽂件夹,所以当前项⽬的stat.py⽂件被引⽤,然⽽这个项⽬下⾯的stat.py⼜引⽤了os模块,这样就产⽣了循环引⽤的问题。
事实上,就算是⼀个空的⽂件stat.py,直接运⾏还是会报错误,因为初始化的时候os模块仍然将引⽤该项⽬下的stat.py⽂件,但是改⽂件是空的,没有相应的设定,所以还是报错。python默认安装路径
结论:不要以已有的系统模块来命名⾃⼰的脚本⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。