web-dev-qa-db-fra.com

Erreur après la mise à niveau de pip: impossible d'importer le nom 'main'

Chaque fois que j'essaie d'installer un paquet à l'aide de 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 __== '__main__':
    sys.exit(main())

Cela fonctionnait très bien plus tôt, je ne suis pas sûr de savoir pourquoi il génère cette erreur .J'ai cherché sur cette erreur, mais je ne trouve rien qui puisse la réparer.

S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples détails, je vais mettre à jour ma question.

232
g_p

Vous devez avoir mis à jour par inadvertance votre pip système (probablement via Sudo pip install pip --upgrade)

pip 10.x ajuste l'emplacement de ses internes. La commande pip3 que vous voyez est fournie par votre responsable 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 le traqueur de problèmes de pip

Vous voudrez probablement not mettre à niveau votre pip système et utiliser plutôt virtualenv.

Pour récupérer le binaire pip3, vous devez Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall.

Si vous souhaitez continuer sur un "territoire non pris en charge" (mise à niveau d'un package système en dehors du gestionnaire de packages système), vous pouvez probablement vous en sortir avec python3 -m pip ... au lieu de pip3.

494
Anthony Sottile

résolu en une seule étape.

Moi aussi, j'ai fait face à ce problème, mais cela peut être résolu simplement en 1 commande sans se soucier de rien et perdre du temps et je l'ai essayé sur plusieurs systèmes, c'est la solution la plus propre à ce problème. Et c'est:

Pour python3: - Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall.

Par ceci, vous pouvez simplement installer des paquets en utilisant pip3. pour vérifier, utilisez pip3 --version.

Pour les versions plus anciennes, utilisez: Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall.

Grâce à cela, vous pouvez maintenant installer simplement des packages en utilisant pip. pour vérifier, utilisez pip --version.

27
Saket

Utilisez python -m pip install au lieu de pip install

Exemple:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

L’exécutable pip (resp. pip3) est fourni par votre distribution (paquet python-pip sous Ubuntu 16.04) et se trouve à /usr/bin/pip.

Par conséquent, il n'est pas tenu à jour avec le package pip lui-même lors de la mise à niveau du pip, et risque de tomber en panne.

Si vous utilisez simplement python -m pip directement, par exemple un péché:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

il parcourt votre chemin Python, trouve la dernière version de pip et exécute ce fichier.

Il repose sur le fait que ce fichier est exécutable via import, mais qu’il s’agit d’un type d’interface très standard, et donc moins susceptible de s’arrêter que le script plus épineux de Debian.

Ensuite, je vous recommande d’ajouter les alias suivants à votre .bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

Testé sous Ubuntu 16.04 après une mise à jour de pip3 9.0.1 à 18.0.

Je suis sur un système où j'ai Sudo apt mais pas de pip Sudo. (Et sans accès su.) Je me suis retrouvé dans la même situation en suivant les conseils de pip: 

Vous utilisez la version de pip 8.1.1, mais 18.0 est disponible. Vous devriez envisager une mise à niveau à l'aide de la commande 'pip install --upgrade pip'.

Aucun des autres correctifs n'a fonctionné pour moi, car je ne possède pas suffisamment de privilèges d'administrateur. Cependant, quelques choses me sont restées liées à la lecture de ceci:

  • Je n'aurais pas dû faire ça. Bien sûr, pip m'a dit de le faire. Il a menti.
  • L'utilisation de --user résout beaucoup de problèmes en se concentrant sur le répertoire réservé à l'utilisateur.

Donc, j'ai trouvé cette ligne de commande à travailler pour me ramener à l'endroit où j'étais. Si vous utilisiez une version différente de la version 8.1.1, vous souhaiterez évidemment modifier cette partie de la ligne.

python -m pip install --force-reinstall pip==8.1.1 --user

C'est la seule chose qui a fonctionné pour moi, mais cela a fonctionné parfaitement!

7
Scott Mermelstein

Vous pouvez résoudre ce problème en réinstallant pip.

Utilisez le code suivant pour réinstaller pip

Pour python2:

python -m pip uninstall pip && Sudo apt install python-pip --reinstall

Pour python2:

 python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
5
Codemaker

Les commandes ci-dessus ne fonctionnaient pas pour moi mais elles étaient très utiles:

Sudo apt purge python3-pip
Sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
Sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
Sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
Sudo rm -rf pip*  
Sudo pip3 install jupyter
3
Pierrot

J'ai rencontré le même problème sur mon système Ubuntu 16.04. J'ai réussi à le réparer en réinstallant pip avec la commande suivante:

curl https://bootstrap.pypa.io/get-pip.py | Sudo python3

2
jkjung13

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 <module>
    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 <command> [options]
2
jim gabriel

La même chose m’est arrivée sur Pixelbook avec le nouveau LXC (strech). Cette solution est très similaire à celle acceptée, avec une différence subtile, qui a fixé pip3 pour moi.

Sudo python3 -m pip install --upgrade pip

Cela a heurté la version, et maintenant cela fonctionne comme prévu.

Je l'ai trouvé ici ... Python.org: S'assurer que le pip est à jour

2
fliptopbox

Récupérer avec python3 -m pip install --user pip==9.0.1 (ou la version qui a fonctionné)

2
Claire

Ce qui a fonctionné pour moi pour corriger l'erreur d'utilisation de pip3 était:

Sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

Tout fonctionne:

 demon@UbuntuHP:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 demon@UbuntuHP:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 demon@UbuntuHP:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

Peut-être que la nouvelle version 10.0.1 de pip ne met pas à jour le binaire dans/usr/bin?

1
cryptoboy

Pour la version 2.7 de Python, la solution @Anthony fonctionne parfaitement, en modifiant python3 en python comme suit:

Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall
1
ewalel

Trick et travaille aussi

Sudo -H pip installer lxml

1
Tejas Tank

J'ai eu la même erreur, mais python -m pip fonctionnait toujours, alors je l'ai corrigé avec l'option nucléaire Sudo python -m pip install --upgrade pip. Il l'a fait pour moi.

0
Sergiu

Cette erreur peut être une permission. Alors, testez l’exécution de la commande avec -H flag:

Sudo -H pip3 install numpy
0
Mohsen Abasi

Comme @cryptoboy l'a dit - vérifiez quelle version de pip/python vous avez installée

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

puis recherchez les bibliothèques inutiles dans votre dossier .local/lib /.

J'ai sauvegardé les paramètres lors de la migration vers le nouveau Kubuntu et le dossier .local/lib/python2.7/de mon répertoire personnel. Python installé 3.6. Je viens de retirer l'ancien dossier et maintenant tout fonctionne très bien!

0
Vergil333

camarades! J'ai le même problème et l'ai résolu. Voici ma solution… .. Premièrement, lorsque je lance pip install quelque chose, l'erreur est la suivante:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

Donc, je cd dans le fichier/usr/bin/et cat pip3 pour voir le code qu'il contient Je vois ceci dedans:

#!/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 __== '__main__':
    sys.exit(main())

Et puis je pense que ce n'était pas dans le chemin d'installation. Donc je cd dans le python3-pip, comme ceci:

cd /.local/lib/python3.5/site-packages/pip

ps: vous devez vous connecter dans le bon sens sur votre ordinateur Ensuite, je lève le fichier pour voir les différences (vous pouvez utiliser d’autres opérations pour voir le code):

cat __main__.py

Et j'ai vu ceci:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

if __== '__main__':
    sys.exit(_main())

Alors, pouvez-vous voir la différence? Je peux comprendre que je dois rendre le fichier identique à celui de/usr/bin/pip3

Donc, j'ai copié le code dans /.local/lib/python3.5/site-packages/pip pour remplacer le code dans /usr/bin/pip3 et le problème a disparu!

ps: pip3 ou pip n’ont aucune différence dans ce problème ... Je serai heureux si ma solution résout votre problème!

0
lin pan
python3.6 -m pip install scipy 

installer avec la commande ci-dessus dans un répertoire particulier, :)

0
vishal

Dans ubuntu 18.04.1 Bionic Beaver, vous devez vous déconnecter et vous reconnecter (redémarrage inutile) pour obtenir l'environnement approprié.

$ Sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

$ pip --version
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
0
Jeff Hoye

importer main de pip._internal

from pip._internal import main

Editer le code pip de

Sudo nano /usr/bin/pip3
0
Akhilesh N S

Pour ce que ça vaut, j'ai eu le problème avec pip (pas pip2 ou pip3):

$ pip -V
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

D'une manière ou d'une autre (je ne me souviens plus comment) j'avais python installé dans mon répertoire ~/.local. Après avoir supprimé le répertoire pip de là, pip a recommencé à fonctionner.

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
0
Michael Burr

Sur Debian, vous devrez d'abord mettre à jour apt ....

Sudo apt-get update -qq
Sudo apt-get install python-pip -qq
Sudo pip install pip --upgrade --quiet
Sudo pip2 install virtualenv --quiet

Si vous ignorez 'Sudo apt-get update -qq', votre pip devient corrompu et affiche l'erreur 'impossible de trouver le principal'.

0
Paul Kenjora