2017-10-17 35 views
0

pip3 --version lance une erreur dernièrement et j'ai de la difficulté à utiliser pip pour installer des paquets dans mon environnement virtuel. C'est un nouveau problème mais je pense que cela pourrait être dû au fait que trop de versions python sont installées sur mon ordinateur.pip3 --version ImportError

Quelqu'un d'autre a-t-il déjà vu cette erreur? Je n'ai jamais eu une erreur de importlib.util jeté précédemment. En outre, cette erreur n'a fait que grimper ces derniers temps. À ma connaissance, je n'ai rien fait pour changer importlib.util.

Error processing line 1 of /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib-2.0.2-py3.6-nspkg.pth: 

    Traceback (most recent call last): 
    File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 168, in addpackage 
     exec(line) 
    File "<string>", line 1, in <module> 
    AttributeError: module 'importlib.util' has no attribute 'module_from_spec' 

Remainder of file ignored 
Traceback (most recent call last): 
    File "/usr/local/bin/pip3", line 11, in <module> 
    load_entry_point('pip==9.0.1', 'console_scripts', 'pip3')() 
    File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 561, in load_entry_point 
    return get_distribution(dist).load_entry_point(group, name) 
    File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point 
    return ep.load() 
    File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2291, in load 
    return self.resolve() 
    File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve 
    module = __import__(self.module_name, fromlist=['__name__'], level=0) 
    File "/usr/local/lib/python3.6/site-packages/pip/__init__.py", line 26, in <module> 
    from pip.utils import get_installed_distributions, get_prog 
    File "/usr/local/lib/python3.6/site-packages/pip/utils/__init__.py", line 22, in <module> 
    from pip.compat import console_to_str, expanduser, stdlib_pkgs 
    File "/usr/local/lib/python3.6/site-packages/pip/compat/__init__.py", line 60, in <module> 
    from importlib.util import cache_from_source 
ImportError: cannot import name 'cache_from_source' 

Répondre

1

Je suis certain que 'module_from_spec' existe en 3.6. Vous pouvez effectivement spécifier la version exacte que votre appel PiP, s'il vous plaît donner un essai que:

pip3.6 install packagename 
+0

Merci pour cela, je vais essayer quand je suis de retour à mon ordinateur. Je crois que j'ai essayé pip3.6 --version juste pour voir ce qui a été retourné mais je ne peux pas me souvenir si l'erreur a été reproduite. Bien qu'il semble qu'il y ait un problème avec 'cache_from_source' aussi. Serait-ce lié à 'module_from_spec'? – Hanzy

+0

Je peux confirmer que lorsque j'exécute pip3 --version j'ai la même erreur et quand j'essaye d'installer dans l'environnement virtuel, je reçois un problème similaire. – Hanzy

+0

Après avoir travaillé avec PATH et avoir supprimé le fichier 'matplotlib-2.0.2-py3.6-nspkg.pth, j'ai pu lancer pip3 --version sans erreur. Je ne reçois plus 'importlib.util n'a aucun attribut 'module_from_spec'. Mais lorsque je tente de PIP3 installer dans un environnement virtuel, je reçois la même erreur au fond comme avant: 'de importlib.util importation cache_from_source ImportError: ne peut pas importer le nom « cache_from_source » ' – Hanzy

0

J'ai trouvé une solution à cette erreur, mais à l'heure actuelle ont pas encore déterminé la cause elle est due à l'improviste. Je suppose que c'est parce que j'ai plusieurs installations de python sur mon ordinateur (différentes versions ainsi que téléchargées à partir de différents endroits tels que homebrew, anaconda, version expédiée OSX, etc ...). Notez que la raison pour les différentes installations était non seulement d'installer des versions mises à jour de python, mais aussi parce que pendant mon éducation sur python j'ai pris beaucoup de classes, souvent qui conseillent une méthode d'installation spécifique. Lors de l'examen de importlib.util, il n'y avait rien de vraiment faux dans le code, j'ai donc décidé de regarder dans l'installation de python anaconda (python 3.6) et de comparer les fichiers importlib.util.

Le haut du fichier importlib.util jeter les erreurs ressemblait à ceci:

"""Utility code for constructing importers, etc.""" 
import functools 
import sys 
import types 
import warnings 
from contextlib import contextmanager 

from . import abc 
from ._bootstrap import _find_spec 
from ._bootstrap import _resolve_name 

Cependant, la partie supérieure de la version Anaconda du fichier importlib.util ressemblait à ceci:

"""Utility code for constructing importers, etc.""" 
from . import abc 
from ._bootstrap import module_from_spec 
from ._bootstrap import _resolve_name 
from ._bootstrap import spec_from_loader 
from ._bootstrap import _find_spec 
from ._bootstrap_external import MAGIC_NUMBER 
from ._bootstrap_external import cache_from_source 
from ._bootstrap_external import decode_source 
from ._bootstrap_external import source_from_cache 
from ._bootstrap_external import spec_from_file_location 

from contextlib import contextmanager 
import functools 
import sys 
import types 
import warnings 

En utilisant IntelliJ je pourrais confirmer qu'il n'y avait pas d'autres différences dans les deux fichiers.

Prenant note des différences dans les importations en provenance ._bootstrap_external I copié et collé les lignes suivantes du anaconda importlib.util fichier dans le répertoire usr/bin importlib.util fichier:

from ._bootstrap_external import MAGIC_NUMBER 
from ._bootstrap_external import cache_from_source 
from ._bootstrap_external import decode_source 
from ._bootstrap_external import source_from_cache 
from ._bootstrap_external import spec_from_file_location 
from ._bootstrap import spec_from_loader 
from ._bootstrap import module_from_spec 

Après l'enregistrement, la fonctionnalité est rétablie PIP3 . Je n'ai pas encore déterminé ce qui a causé le changement à l'origine, mais si quelqu'un d'autre a un problème similaire, je recommande de copier le code du troisième bloc ci-dessus et de l'insérer en haut de votre fichier importlib.util.