J'ai installé la dernière version de Python (2.7.9) fournie avec pip et setuptools pour Windows 32 bits. J'ai essayé de réinstaller pip mais le problème persiste.
Voici l'erreur après avoir exécuté pip --version
dans Administrator cmd:
Traceback (most recent call last):
File "D:\Python\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "D:\Python\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "D:\Python\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: cannot import name main
Le bogue se trouve dans le pip 10.0.0.
Sous Linux, vous devez modifier le fichier:/usr/bin/pip à partir de:
from pip import main
if __== '__main__':
sys.exit(main())
pour ça:
from pip import __main__
if __== '__main__':
sys.exit(__main__._main())
Même si la question initiale semble être celle de 2015, ce "bogue" semble également affecter les utilisateurs installant pip-10.0.0
.
La solution de contournement consiste à ne pas modifier pip
, mais à modifier la façon dont pip est appelé. Au lieu d'appeler /usr/bin/pip
, appelez pip
via Python lui-même. Par exemple, au lieu de ce qui suit:
pip install <package>
Si depuis Python version 2 (ou le binaire Python par défaut s'appelle python
), faites:
python -m pip install <package>
ou si à partir de Python version 3:
python3 -m pip install <package>
Sur Ubuntu Server 16, j'ai le même problème avec python27. Essaye ça:
Changement
from pip import main
if __== '__main__':
sys.exit(main())
À
from pip._internal import main
if __== '__main__':
sys.exit(main())
Sous Windows 10, j'ai utilisé les commandes suivantes pour rétrograder pip:
python -m pip uninstall pip
python -m pip install pip==9.0.3
Ça marche.
j'ai résolu le problème en réinstallant pip en utilisant get-pip.py
.
python get-pip.py
.Et pip est fixe et fonctionne parfaitement.
J'ai eu le même problème, mais désinstaller et réinstaller avec apt et pip ne fonctionnait pas pour moi.
J'ai vu une autre solution qui présente un moyen facile de récupérer le chemin pip3:
Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
Sous MacOS, si vous avez installé python via Homebrew, modifiez la ligne dans /usr/local/opt/python/libexec/bin/pip
de
from pip.internal import main
à
from pip._internal import main
Ou utilisez cette doublure: sed -i '' "s/from pip import main/from pip._internal import main/" /usr/local/opt/python/libexec/bin/pip
Le problème est dû aux modifications apportées dans le pip version 10 déplaçant l’espace de nom interne sous main._internal
et au script bin mis en place par homebrew qui le cherchait toujours à l’ancien emplacement (où il était auparavant). Problème et discussion https://github.com/pypa/pip/issues/5240
Si vous avez un lien physique à analyser dans votre PATH
(c'est-à-dire si vous avez plusieurs versions de Python installées) et que vous mettez ensuite à niveau pip, vous pouvez également rencontrer cette erreur.
La solution consiste à recréer le lien dur. Ou encore mieux, arrêtez d'utiliser des liens physiques et utilisez des liens souples.
Une solution simple qui fonctionne avec Ubuntu, mais qui peut également résoudre le problème sous Windows:
Il suffit d'appeler
pip install --upgrade pip
essaye ça
#!/usr/bin/python
# 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.i
try:
from pip import main
except ImportError:
from pip._internal import main
if __== '__main__':
sys.exit(main())
Pour ceux qui rencontrent des problèmes similaires lors de l’utilisation du pip 10 avec PyCharm, téléchargez la dernière version ici
Cela fonctionne sur Ubuntu 16.04. Étape 1:
Sudo gedit /home/user_name/.local/bin/pip
un fichier s'ouvre avec le contenu:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip import main
if __== '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Changez la main
en __main__
tel qu’il apparaît ci-dessous:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip import __main__
if __== '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(__main__._main())
Enregistrez le fichier et fermez-le. Et vous avez terminé!