VS Code中.ipynb导入matplotlib遇循环导入错误,.py文件正常
问题描述
- 在VS Code中运行.ipynb文件时,导入matplotlib触发循环导入错误,报错信息为:
ImportError: cannot import name '_docstring' from partially initialized module 'matplotlib' (most likely due to a circular import) - 同一Python环境下的.py文件执行相同导入及绘图代码完全正常,且工作目录中无
_docstring同名文件
.ipynb文件运行代码:
import numpy as np import matplotlib.pyplot as plt import cv2 as cv
完整报错栈:
ImportError Traceback (most recent call last) Cell In[3], line 2 1 import numpy as np ----> 2 import matplotlib.pyplot as plt 3 import cv2 as cv File c:\Users\P****\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\__init__.py:113 109 from packaging.version import parse as parse_version 111 # cbook must import matplotlib only within function 112 # definitions, so it is safe to import from it here. --> 113 from . import _api, _version, cbook, _docstring, rcsetup 114 from matplotlib.cbook import sanitize_sequence 115 from matplotlib._api import MatplotlibDeprecationWarning ImportError: cannot import name '_docstring' from partially initialized module 'matplotlib' (most likely due to a circular import) (c:\Users\P****\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\__init__.py)
同环境下可正常运行的.py代码:
import matplotlib.pyplot as plt import numpy as np x = np.arange(1,10,0.1) y = x**2 plt.plot(x,y) plt.show()
解决方案
- 重启Jupyter内核:在.ipynb文件右上角点击「重启内核」按钮,清除会话缓存后重新运行代码
- 调整导入顺序:将matplotlib的导入放在所有库的最前面,避免其他库初始化时干扰matplotlib的模块加载:
import matplotlib.pyplot as plt import numpy as np import cv2 as cv - 清除matplotlib缓存:找到Python环境中matplotlib安装目录下的
__pycache__文件夹(路径示例:c:\Users\P****\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\__pycache__),删除该文件夹后重新运行代码 - 升级matplotlib版本:打开终端执行命令
pip install --upgrade matplotlib,修复旧版本中可能存在的循环导入bug - 更新VS Code Jupyter扩展:在VS Code扩展市场中检查Jupyter扩展是否为最新版本,更新后重启编辑器再测试
内容的提问来源于stack exchange,提问作者Prashant Tiwari
相关产品推荐
相关产品推荐

