【问题标题】:pathlib library error in pathlib.Path.home() : type object 'Path' has no attribute 'home'pathlib.Path.home() 中的 pathlib 库错误:类型对象 'Path' 没有属性 'home'
【发布时间】:2019-07-22 21:24:03
【问题描述】:

所以我刚刚将 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,使用的是带有 python3.6.7 的 Jupyter Lab 0.35.4。

边信息/问题:今天早上安装 jupyter lab 之前,我正在使用带有 python3.6.0 的 jupyter notebook。现在内核说它正在使用 python3.6.7,尽管我似乎在我的系统上的任何地方都找不到它。

据说,当我导入不依赖于 matplotlib.pyplot 的任何其他内容时,一切正常。例如,如果我尝试使用 seaborn,它会返回相同的属性错误。

EDIT 实际上,错误发生在 pathlib 库中。无论我是否在 jupyter 中,都会发生这种情况。复制它:

from pathlib import Path
Path.home() 

而且错误和以前一样:

AttributeError: type object 'Path' has no attribute 'home'

【问题讨论】:

  • 该错误提示您使用 doc 但是,至少还有一个其他用户 with the same problem
  • 是的!看到了,但是我在想在编辑 matplotlob 文件之前可能还有其他方法。
  • 我绝对不建议编辑 matplotlib 源代码。相反,您应该尝试找出为什么 from pathlib import Path; Path.home() 对您失败。这与 matplotlib 无关。
  • 抱歉耽搁了,这对于 pathlib 来说似乎是一个相当少见的错误,因为我找不到关于它的信息!
  • 我想我会先看看它是否在 jupyter 实验室之外工作。当然,您可以提供的有关您的系统和环境的任何进一步信息都可能有助于某人识别任何潜在问题。当然,如果在 matplotlib 的上下文之外提出这个问题,它可能会引起更多关注。

标签: python python-3.x matplotlib jupyter-lab


【解决方案1】:

我能够通过在我使用 python 的环境中执行 pip uninstall pathlib 并收到此错误来解决此问题。

这应该适用于使用 python >=3.5 的任何人

问题的原因是从 python 3.5 及更高版本开始,pathlib 与 python 的所有标准库捆绑在一起。这将是具有Path.home() 的较新版本。但是,如果出于某种原因,像我一样,您还通过pippathlib 作为独立软件包安装,它将是没有pathlib.Path.home() 的旧版本,因此在调用home() 时会中断.

在使用 pip uninstall pathlib 卸载 pathlib 之前,请确保:

  1. 通过运行python --version,您实际上拥有 python >= 3.5。
  2. 您实际上通过运行pip show pathlib 冗余安装了“旧”pathlib

【讨论】:

    【解决方案2】:

    如果您的环境包含多个版本的python,请通过pip show检查您的环境当前使用的是哪个版本的pathlib。

    pip show pathlib
    

    如果是指向python

    您可以通过sys.path进一步查看python包的目录列表。如果它显示的目录是意外版本的 python 早于预期版本,这就是您的环境导入旧 pathlib 的原因。

    import sys
    sys.path
    

    【讨论】:

      【解决方案3】:

      我最近遇到了这个问题,matplotlib 试图导入和使用 pathlib 并且失败了,因为我的 virtualenv 是 3.6,但它以某种方式获得了 3.4 pathlib 并遇到了您遇到的异常或它正在调用的 mkdir() 的另一个异常缺少 exists_ok 可选参数。

      原来我使用的其中一个模块,openapi-spec-validator 版本 0.2.6,下载了 pathlib(3.4 类型)的副本并将其粘贴到基本站点包文件夹中,它可以轻松地最终被 matplotlib 使用,而不是标准库版本。在我的情况下,升级到 0.2.7 修复了它,因为该版本不会下载并将文件放在那里。

      但是,如果您没有使用 openapi-spec-validator 并且遇到此问题,请检查是否有额外的 pathlib.py 副本漂浮在您的环境中。

      【讨论】:

      • 嗨!感谢您迟到的回复!最后,也许它有点激烈,但无论如何我都必须这样做,我最终格式化了我的计算机并开始在虚拟环境中使用所有东西进行全新安装。到目前为止一切都很好!
      【解决方案4】:

      卸载matplotlib再安装的经典技巧呢?

      pip uninstall matplotlib==3.0.2
      pip install matplotlib==3.0.2
      

      另外,如果您还没有这样做,我强烈建议您检查是否使用虚拟环境(例如 this guide),因为您可以绝对控制在特定虚拟环境中安装/修改/卸载哪些软件包(不影响您所有项目的开发环境)。

      【讨论】:

      • 感谢您的回复!顺便说一句,您的链接有一个额外的 http:// 。我已经尝试卸载并重新安装 matplotlib 以及 pathlib 以获得良好的措施。我已经能够复制错误:from pathlib import Path 然后Path.home()Path 中没有这样的属性
      • 谢谢!修复了链接。运行Path.cwd() 会得到什么?
      • 返回我的主文件夹 (/home/galex)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 2018-12-07
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      相关资源
      最近更新 更多