3
votes

Erreur de bibliothèque pathlib dans pathlib.Path.home (): l'objet de type 'Path' n'a pas d'attribut 'home'

Je viens donc de mettre à jour matplotlib vers la version 3.0.2. Je peux très bien importer matplotlib, mais quand j'essaye d ' importer matplotlib.pyplot , j'obtiens:

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

Je suis sur Ubuntu 18.04 LTS, sur Jupyter Lab 0.35 .4 avec python3.6.7.

Informations secondaires / question: Avant d'installer jupyter lab ce matin, j'utilisais jupyter notebook avec python3.6.0. Maintenant, le noyau dit qu'il utilise python3.6.7, bien que je ne semble pas le trouver nulle part sur mon système.

Cela étant dit, quand j'importe quoi que ce soit d'autre qui ne repose pas sur matplotlib.pyplot, tout marche parfaitement. Si j'essaye seaborn, par exemple, cela me renvoie à la même erreur d'attribut.

EDIT En fait, l'erreur se produit avec la bibliothèque pathlib. Cela arrive aussi que je sois en Jupyter ou non. Pour le reproduire:

from pathlib import Path
Path.home() 

et l'erreur est la même que précédemment:

---------------------------------------------------------------------------
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'


7 commentaires

L'erreur suggérerait que vous utilisiez une version python <3.5. doc Cependant, il y a au moins un autre utilisateur avec le même problème .


Ouais ! J'ai vu cela, mais je pensais qu'il pourrait y avoir un autre moyen avant d'éditer les fichiers matplotlob.


Je ne recommanderais certainement pas d'éditer la source matplotlib. Vous devriez plutôt essayer de découvrir pourquoi à partir de pathlib import Path; Path.home () échoue pour vous. C'est indépendant de matplotlib.


Désolé pour le retard, il semblerait que ce soit une erreur assez rare pour pathlib car je ne trouve pas d'informations dessus!


Je pense que je commencerais par découvrir si cela fonctionne en dehors de Jupyter Lab ou non. Bien entendu, toute information supplémentaire que vous pouvez fournir sur votre système et votre environnement peut aider quelqu'un à identifier tout problème potentiel. Bien sûr, la question pourrait attirer plus d'attention si elle est posée en dehors du contexte de matplotlib.


Merci pour le tuyau ! Je vais changer ma question en quelque chose sur pathlib! bonne idée


Réponse tardive, probablement pas la meilleure réponse, mais je devais quand même: j'ai formaté mon ordinateur et réinstallé dans des environnements virtuels. Un peu drastique, mais plus de problèmes!


3 Réponses :


0
votes

Qu'en est-il de l'astuce classique consistant à désinstaller matplotlib et à l'installer à nouveau?

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

De plus, si vous ne le faites pas déjà, je vous suggère fortement de vérifier l'utilisation d'environnements virtuels (par exemple, ce guide ) car vous aurez un contrôle absolu sur les packages que vous installez / modifiez / désinstallez dans un virtualenv particulier (n'affectant pas votre environnement de développement pour tous vos projets).


3 commentaires

Merci pour votre réponse! BTW, votre lien a un http supplémentaire: //. J'ai essayé de désinstaller et de réinstaller matplotlib et pathlib pour de bonnes mesures. J'ai pu répliquer l'erreur avec: from pathlib import Path puis Path.home () mais il n'y a pas un tel attribut dans Path


Merci! corrigé le lien. Qu'obtenez-vous lorsque vous exécutez Path.cwd () ?


renvoie mon dossier personnel ( / home / galex )



2
votes

J'ai frappé ceci récemment où matplotlib essayait d'importer et d'utiliser pathlib et a échoué parce que mon virtualenv était de 3.6 mais il obtenait en quelque sorte un pathlib 3.4 et frappait soit l'exception que vous avez frappée, soit une autre exception où le mkdir () qu'il appelait était il manque le paramètre facultatif exists_ok.

Il s'est avéré que l'un des modules que j'utilisais, openapi-spec-validator version 0.2.6, télécharge une copie de pathlib (de type 3.4) et la colle dans le dossier de base site-packages où il peut facilement finissent par être utilisé par matplotlib au lieu de la version standard de la bibliothèque. Dans mon cas, la mise à niveau vers la version 0.2.7 l'a corrigé car cette version ne télécharge pas et ne place pas le fichier là-bas.

Cependant, si vous n'utilisez pas openapi-spec-validator et que vous rencontrez ce problème, vérifiez s'il existe des copies supplémentaires de pathlib.py flottant dans votre environnement.


1 commentaires

Salut ! Merci pour votre réponse tardive! Au final, c'est peut-être un peu drastique, mais je devais le faire quand même, j'ai fini par formater mon ordinateur et commencé une installation propre avec tout dans des environnements virtuels. Tout va bien jusqu'à présent!



1
votes

Si votre environnement inclut plusieurs versions de python, vérifiez quelle version de pathlib votre environnement utilise actuellement par pip show.

import sys
sys.path

S'il pointe vers le pathlib de python

Vous pouvez vérifier la liste des répertoires du paquet python par sys.path. S'il affiche des répertoires d'une version inattendue de python antérieure à celle d'une version attendue, c'est la raison pour laquelle votre environnement importe l'ancienne pathlib.

pip show pathlib


0 commentaires