ImportError:无法从“matplotlib”导入名称“docstring”

46qrfjad  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(394)

最近,我的代码涉及matplotlib.pyplot突然停止工作在我所有的机器(Ubuntu 22.04 LTS)。我尝试了一个简单的import,并得到以下错误:

$ python
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.10/dist-packages/matplotlib/pyplot.py", line 66, in <module>
    from matplotlib.figure import Figure, FigureBase, figaspect
  File "/usr/local/lib/python3.10/dist-packages/matplotlib/figure.py", line 43, in <module>
    from matplotlib import _blocking_input, backend_bases, _docstring, projections
  File "/usr/local/lib/python3.10/dist-packages/matplotlib/projections/__init__.py", line 58, in <module>
    from mpl_toolkits.mplot3d import Axes3D
  File "/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/__init__.py", line 1, in <module>
    from .axes3d import Axes3D
  File "/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py", line 23, in <module>
    from matplotlib import _api, cbook, docstring, _preprocess_data
ImportError: cannot import name 'docstring' from 'matplotlib' (/usr/local/lib/python3.10/dist-packages/matplotlib/__init__.py)

我不知道是什么原因导致了这个问题,以及如何诊断或修复它。matplotlib软件包是使用pip作为root安装的,因为我需要它在默认情况下对所有用户可用。

  • 有没有人遇到类似的问题,并知道如何解决它?*
ipakzgxi

ipakzgxi1#

正如@Imsteffan的评论中所指出的,以及这里和这里的链接错误报告,这个问题的发生是因为:
. docstring在2个版本的弃用周期后被删除,并更改为私有(_docstring)
但是,mplot 3d/axes3d.py中出现错误的行已更新#22148,表明您的mpl版本小于3.6
在我的操作系统中就是这种情况。事实证明,apt包python3-matplotlib也作为另一个包(qgis)的依赖项安装。所以有两个版本的matplotlib,分别来自pip和apt。
解决方案是删除两个版本中的一个。
在链接的bug报告中,建议删除apt版本:

sudo apt remove python3-matplotlib

但在我的例子中,我不能删除依赖于apt版本的应用程序。所以我删除了pip版本。然后导入就像预期的那样工作了。

$ sudo pip uninstall matplotlib
Found existing installation: matplotlib 3.8.0
Uninstalling matplotlib-3.8.0:
  Would remove:
    /usr/local/lib/python3.10/dist-packages/matplotlib-3.8.0.dist-info/*
    /usr/local/lib/python3.10/dist-packages/matplotlib/*
    /usr/local/lib/python3.10/dist-packages/mpl_toolkits/axes_grid1/*
    /usr/local/lib/python3.10/dist-packages/mpl_toolkits/axisartist/*
    /usr/local/lib/python3.10/dist-packages/mpl_toolkits/mplot3d/*
    /usr/local/lib/python3.10/dist-packages/pylab.py
Proceed (Y/n)? 
  Successfully uninstalled matplotlib-3.8.0

相关问题