所以我刚刚将matplotlib更新为版本3.0.2。我可以很好地导入matplotlib,但是当我尝试使用import matplotlib.pyplot
时,我会得到:
---------------------------------------------------------------------------
AttributeError
Traceback (most recent call last) <ipython-input-3-864e826dab68> in <module>()
----> 1 import matplotlib.pyplot
/usr/local/lib/python3.6/dist-packages/matplotlib/pyplot.py in <module>()
30 from cycler import cycler
31 import matplotlib
---> 32 import matplotlib.colorbar
33 import matplotlib.image
34 from matplotlib import rcsetup, style
/usr/local/lib/python3.6/dist-packages/matplotlib/colorbar.py in <module>()
30 import matplotlib.collections as collections
31 import matplotlib.colors as colors
---> 32 import matplotlib.contour as contour
33 import matplotlib.cm as cm
34 import matplotlib.gridspec as gridspec
/usr/local/lib/python3.6/dist-packages/matplotlib/contour.py in <module>()
16 import matplotlib.colors as mcolors
17 import matplotlib.collections as mcoll
---> 18 import matplotlib.font_manager as font_manager
19 import matplotlib.text as text
20 import matplotlib.cbook as cbook
/usr/local/lib/python3.6/dist-packages/matplotlib/font_manager.py in <module>()
133
134 if not USE_FONTCONFIG and sys.platform != 'win32':
--> 135 OSXFontDirectories.append(str(Path.home() / "Library/Fonts"))
136 X11FontDirectories.append(str(Path.home() / ".fonts"))
137
AttributeError: type object 'Path' has no attribute 'home'
我在Ubuntu 18.04 Lts上,在Jupyter Lab上0.35.4,python3.6.7。
附带信息/问题:今天早上安装Jupyter Lab之前,我使用的是jupyter笔记本,其中python3.6.0。现在,内核说它正在使用Python3.6.7,尽管我似乎在系统上的任何地方都找不到它。
被告知,当我导入其他不依赖matplotlib.pyplot的其他内容时,一切都可以很好地工作。例如,如果我尝试Seaborn,它会将我返回相同的属性错误。
编辑实际上,pathlib库发生了错误。无论我是否在朱皮特,都会发生这种情况。复制它:
from pathlib import Path
Path.home()
错误与以前相同:
AttributeError: type object 'Path' has no attribute 'home'
我最近在此打了Matplotlib试图导入和使用Pathlib和失败的地方,因为我的Virtualenv是3.6它在呼叫的mkdir()丢失了已有的exists_ok可选参数。
事实证明,我正在使用的一个模块,即OpenAPI-Spec-validator版本0.2.6,下载了Pathlib(3.4类型)的副本,并将其粘贴在基本站点包装文件夹中最终由matplotlib而不是标准库版本使用。在我的情况下,将其升级到0.2.7修复了,因为该版本未下载并将文件放在那里。
但是,如果您不使用openapi-spec-validator,并且遇到此问题检查以查看环境周围是否有额外的pathlib.py副本。
如果您的环境包含多个版本的python,请检查您的环境当前正在使用PIP SHOW。
pip show pathlib
如果指向Python&lt; 3.5的Pathlib,请将PythonPath修改为Python预期版本的Point Pathlib。
您可以通过SYS.Path进一步检查Python包的目录列表。如果它比预期版本更早显示了意外版本的Python的目录,这就是您的环境导入旧Pathlib的原因。
import sys
sys.path
我能够通过在我使用python并遇到此错误的环境中执行pip uninstall pathlib
来解决此问题。
这应该适用于使用Python&gt; = 3.5
的任何人问题的原因是,从Python 3.5及以后,Pathlib与Python的所有标准库捆绑在一起。这将是具有Path.home()
的较新版本。但是,如果出于某种原因,像我一样,您还通过pip
安装了pathlib
,则它将是没有pathlib.Path.home()
的较旧版本,因此当调用home()
时会断开。
使用pip uninstall pathlib
卸载Pathlib之前,请确保:
- 实际上,您通过运行
python --version
。 - 您实际上已经有一个冗余的"旧安装"。
pathlib
通过运行pip show pathlib
卸载matplotlib并再次安装的经典技巧呢?
pip uninstall matplotlib==3.0.2
pip install matplotlib==3.0.2
另外,如果您还没有这样做,我强烈建议您使用虚拟环境检查(例如本指南),因为您将在特定的Virtualenv中具有绝对的控制您安装/修改/卸载的软件包(不影响您的您所有项目的开发环境)。