ImportError: impossible d'importer le nom principal lors de l'exécution de la commande pip --version dans Windows7 32 bits


144

J'ai installé le dernier python (2.7.9) fourni 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 l'exécution pip --versiondans 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

1
Cela peut être lié à l'autorisation de fichier, il y avait un problème avec python 3.4 ici qui a été résolu, cela vaut la peine d'être vérifié.
Kobi K

J'ai fait les solutions de contournement en utilisant la commande icacls mais l'erreur persiste.
Woootiness

2
Réponse "easy_install -U pip" fournie à stackoverflow.com/questions/28031277/…
unpack

Réponses:


172

Même si la question d'origine semble remonter à 2015, ce «bogue» semble également affecter les utilisateurs qui installent pip-10.0.0.

La solution de contournement n'est pas de modifier pip, mais de changer la façon dont pip est appelé. Au lieu d'appeler /usr/bin/pipcall pipvia Python lui-même. Par exemple, au lieu de ce qui suit:

pip install <package>

Si à partir de la version 2 de Python (ou si le binaire Python par défaut est appelé python), faites:

python -m pip install <package>

ou si à partir de la version 3 de Python:

python3 -m pip install <package> 

ouais, je ne me souviens pas de ce que j'ai fait pour résoudre ce problème, mais je garde cela ouvert aux autres.
Woootiness

Lorsque j'ai utilisé la commande donnée, j'ai eu une erreur d'autorisations (que j'ai également obtenue après avoir modifié pip selon la réponse de catalinpopescu). Cependant, pour télécharger des packages pour la portée de l'utilisateur (afin que vous n'ayez pas besoin de droits d'administration), utilisez: python3 -m pip install <package> --user (fonctionne pour python3, devrait également fonctionner pour python2 bien que non testé)
randmin

M'a aidé sur un Mac.
charles ross

Meilleure réponse. La modification du code source est un marais.
ozgur

C'est une très bonne voie à suivre. Il est également très facile d'obtenir l'assurance que vous utilisez la bonne version:python2 -m pip install $package
JamesTheAwesomeDude

256

Le bogue se trouve dans pip 10.0.0.

Sous Linux, vous devez modifier le fichier: / usr / bin / pip depuis:

from pip import main
if __name__ == '__main__':
    sys.exit(main())

pour ça:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

1
Il semble que ce soit la solution. J'ai essayé ceci et aucun problème jusqu'à présent.
Khue

2
J'utilise pip 10.0.1 et le bogue est toujours là. Votre solution a aidé. Merci! Avez-vous signalé ce bogue et la solution aux développeurs?
Alexey Subach

7
Bien que cette solution fonctionne, veuillez vous abstenir de se modifier pip. Voir une solution plus propre ci-dessous pour appeler à pippartir de Python à la place.
Wan Bachtiar

1
N'aide pas sur "pip 10.0.1". pip --version pip 10.0.1 from /home/x/.local/lib/python2.7/site-packages/pip (python 2.7) utilisation: sudo pip install tensorflow sortie:Traceback (most recent call last): File "/usr/bin/pip", line 9, in <module> from pip import main ImportError: cannot import name main
user_x

3
@creepy_driver, la modification manuelle d'un package installé pour l'adapter à l'environnement n'est pas recommandée car la prochaine fois que vous mettez à jour vers une autre version, c'est-à-dire 10.0.3, vous rencontrerez probablement le même problème. La solution de contournement de l'exécution pipvia Python installé indiquera à pip d'utiliser correctement l'environnement approprié.
Wan Bachtiar

60

Sur Ubuntu Server 16, j'ai le même problème avec python27. Essaye ça:

Changement

from pip import main
if __name__ == '__main__':
    sys.exit(main())

À

from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())

1
A travaillé sur ubuntu 16.04
Sameera Kumarasingha

Ce n'est pas une bonne idée. Comme mentionné dans une autre réponse de @RichardElkins: "Les gens ne devraient pas perdre leur temps à éditer les fichiers installés qui ne sont pas destinés à être modifiés après l'installation"
juergi

20

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

Cela devrait également fonctionner sur Linux et Mac.


1
Cela devrait être python -m pip install pip == 9.0.3
elelias

@elelias Oh, je ne m'en suis pas rendu compte. Merci de me le dire!
kiyah

1
J'ai dû le faire python easy_install.py pip==9.0.3car après la première ligne, pip n'a pas été trouvé.
Suzanne

3
Fonctionne également sur Linux et Mac. C'est une solution de contournement jusqu'à ce que pip / pip3 10 soit corrigé. Les gens ne devraient pas perdre leur temps à éditer les fichiers installés qui ne sont pas destinés à être modifiés après l'installation ..
Richard Elkins

J'ai eu des problèmes de chemin après la mise à niveau, j'ai fait ce qui suit pour que cela fonctionne. sudo python -m pip désinstaller pip && sudo apt install python-pip --reinstall
webjockey

10

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 simple de récupérer le chemin pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

1
J'avais python 2.7, donc j'ai dû modifier la commande pour qu'elle corresponde à python 2.7 sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
webjockey

fonctionne parfaitement sur ubuntu mais je pense que cela ne fonctionnera pas sur Windows
zaki benz


2

Sur 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

Explication:

Le problème est causé par les changements dans la version 10 de pip déplaçant l'espace de noms interne sous main._internalet le script bin mis en place par l'homebrew qui le cherche toujours depuis l'ancien endroit (où il se trouvait dans la version 9). Problème et discussion https://github.com/pypa/pip/issues/5240


1

Si vous avez un lien physique vers pip dans votre PATH (c'est-à-dire si vous avez plusieurs versions de python installées) et que vous mettez à jour pip, vous pouvez également rencontrer cette erreur.

La solution consiste à créer à nouveau le hardlink. Ou mieux encore, arrêtez d'utiliser des liens physiques et utilisez des liens logiciels.


1
Comment régler ceci?
user_x

1

Sous Windows 10, j'ai eu le même problème. PIP 19était déjà installé dans mon système mais n'apparaissait pas. L'erreur était No Module Found.

python -m pip uninstall pip
python -m pip install pip==9.0.3

Le passage pipà la version 9.0.3 a bien fonctionné pour moi.



0

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 __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

Remplacez le mainpar __main__tel qu'il apparaît ci-dessous:

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip import __main__

if __name__ == '__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é!


0

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 __name__ == '__main__':
    sys.exit(main())

0

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

0

Cela a résolu mon problème dans ubuntu 18.04 en essayant d'utiliser python3.6:

rm -rf ~/.local/lib/python3.6

Vous pouvez déplacer le dossier vers un autre emplacement en utilisant mv au lieu de le supprimer également, pour le test:

mv ~/.local/lib/python3.6 ./python3.6_old

0

Ouvrez votre terminal linux.

hash -d pip

Salut Carlos, bienvenue dans Stack Overflow. Pour aider les autres utilisateurs confrontés à ce problème, pourriez-vous ajouter à votre réponse pour clarifier ce que fait cette commande et comment elle résout le problème.
CyberJacob

0

Dans notre cas, en 2020 en utilisant Python3, la solution à ce problème était de déplacer l'installation Python vers le cloud-initscript de démarrage qui instanciait la VM.

Nous avions rencontré cette même erreur lorsque nous avions essayé d'installer Python à l'aide de scripts appelés par les utilisateurs plus tard dans le cycle de vie de la VM, mais le déplacement du même code d'installation Python vers le cloud-initscript a éliminé ce problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.