Erreur après la mise à jour de pip : cannot import name 'main&#39 ;

Chaque fois que j'essaie d'installer un paquet en utilisant pip, j'obtiens cette erreur d'importation :

guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'


guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

Il fonctionnait bien avant, je ne sais pas pourquoi il affiche cette erreur. J'ai fait des recherches sur cette erreur, mais je n'ai rien trouvé pour la corriger.

Veuillez me faire savoir si vous avez besoin de plus de détails, je mettrai ma question à jour.

Solution

Vous devez avoir mis à jour par inadvertance votre système pip (probablement par quelque chose comme sudo pip install pip --upgrade)

pip 10.x a modifié l'emplacement de ses composants internes. La commande pip3 que vous voyez est une commande fournie par votre mainteneur de paquet (probablement basé sur debian ici ?) et n'est pas un fichier géré par pip.

Vous pouvez en savoir plus à ce sujet sur [pip's issue tracker] (https://github.com/pypa/pip/issues/5221).

Vous voudrez probablement ne pas mettre à jour votre système pip et utiliser un virtualenv à la place.

Pour récupérer le binaire pip3, vous devrez sudo python3 -m pip uninstall pip &&amp ; sudo apt install python3-pip --reinstall.

Si vous voulez continuer sur un territoire non supporté (mettre à jour un paquet système en dehors du gestionnaire de paquets système), vous pouvez probablement vous en sortir avec python3 -m pip ... au lieu de pip3.

Commentaires (17)

Vérifiez si pip a été mis en cache sur un autre chemin, pour ce faire, appelez $ which pip et vérifiez que le chemin est différent de celui indiqué dans l'erreur, si c'est le cas exécutez :

$ hash -r

Lorsque le cache sera vidé, pip fonctionnera à nouveau. référence : http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Commentaires (0)

J'utilise sudo apt remove python3-pip puis pip fonctionne.

 ~ sudo pip install pip --upgrade
[sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    from pip import main
ImportError: cannot import name 'main'
➜  ~ sudo apt remove python3-pip   
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
  python3.5-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜  ~ pip

Usage:   
  pip  [options]
Commentaires (1)