503 votes

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

Chaque fois que j'essaie d'installer un package à 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 __name__ == '__main__':
    sys.exit(main())
 

Cela fonctionnait bien plus tôt, je ne sais pas pourquoi il lance cette erreur. J'ai recherché cette erreur, mais je ne trouve rien pour la corriger.

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

874voto

Anthony Sottile Points 3629

Vous devez avoir, par inadvertance, à niveau de votre système pip (probablement par le biais de quelque chose comme sudo pip install pip --upgrade)

pip 10.x ajuste où ses entrailles sont situés. L' pip3 commande que vous voyez est celui fourni par votre responsable de paquet (probablement basé sur debian ici?) et n'est pas un fichier géré par le pip.

Vous pouvez en lire plus à ce sujet sur le pip de l'outil de suivi

Vous aurez probablement envie de ne pas mettre à niveau votre système pip et au lieu d'utiliser un virtualenv.

Pour récupérer l' pip3 binaires, vous aurez besoin d' sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

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

121voto

vijay athithya Points 1008

L'erreur peut être résolue en modifiant le fichier pip

Vérifiez l'emplacement du fichier:

 $ which pip
 

chemin -> / usr / bin / pip

Accédez à cet emplacement /usr/bin/pip et ouvrez un terminal.

Entrez: $ sudo nano pip

Tu peux voir:

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

Changer pour:

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

puis Ctrl + O écrire les modifications et quitter.

J'espère que cela fera l'affaire !!

73voto

Alex C. Points 2639

Pour de la famille Ubuntu, Debian, Linux Mint utilisateurs

Merci à Anthony de l'explication ci-dessus, vous pouvez conserver votre système d'origine pip (dans /usr/bin/ et dist-packages/) et retirer le installé manuellement pip (dans ~/.local/) pour résoudre le conflit:

$ python3 -m pip uninstall pip

Ubuntu/Debian pip v8.1.1 (16.04) à partir de python3-pip paquet debian (voir$ pip3 -V) montre les mêmes résultats de recherche que les derniers pip v10.0.1, et installe les derniers modules de PyPI l'amende juste. Il a un travail pip commande (déjà dans le $PATH), plus le gentil --user option patché par défaut depuis 2016. En regardant pip notes de version, les versions les plus récentes sont pour la plupart au sujet de cas d'utilisation de corrections de bugs et de nouvelles fonctionnalités, donc pas tout le monde a à précipiter la mise à niveau de pep pour l'instant. Et la nouvelle pip 10 peut être déployé à Python virtualenvs, de toute façon.

Mais indépendamment de pips, votre système d'exploitation permet d'installer rapidement des communes des modules Python (y compris numpy) avec APT, sans la nécessité pour le pep, par exemple:
$ sudo apt install python3-numpy python3-scipy (avec système de dépendances)
$ sudo apt install python3-pip (Debian-patché pip, un peu vieux, mais il n'a pas d'importance)

Rapide apt rappel de la syntaxe (voir man apt pour les détails):
$ sudo apt update (pour resynchroniser Ubuntu fichiers d'index à partir de la mise à jour des sources)
$ apt search <python-package-name> (texte intégral de recherche sur tous les paquets disponibles)
$ apt show <python-package-name> (affiche le programme détaillé de la description)
$ sudo apt install <python-package-name>

Les noms de paquets avec le préfixe python- sont pour Python 2; et avec le préfixe python3- sont pour Python 3 (ex: python3-pandas). Il y a des milliers, et ils subissent des tests d'intégration au sein de Debian et Ubuntu. Sauf si vous cherchez à installer à chaque niveau de l'utilisateur (pip install --user option) ou dans le virtualenv/venv, apt pourrait être ce dont vous avez besoin. Ces paquets sont accessibles à partir de virtuel envs trop, comme virtualenv sera gracieusement tomber en arrière à l'aide du système libs sur l'importation si votre envs n'ont pas donné des copies des modules. Votre custom-installé (avec le pip --user) par utilisateur modules en ~/.local/lib va se substituer à eux aussi.

Remarque, puisque c'est un système à l'échelle de l'installation, vous feriez rarement besoin de les enlever (il faut être attentif au sujet de dépendances OS). C'est pratique pour les paquets avec de nombreuses dépendances (comme avec ou scipy matplotlib), APT permettra de garder une trace et de fournir tous les système libs et C extensions, tandis qu'avec le pip vous avez pas de telles garanties.

En fait, à l'échelle du système les paquets Python (contrairement à par utilisateur, la maison dir niveau, ou moins), Ubuntu s'attend à l'aide du gestionnaire de paquets APT (plutôt que d' sudo pip) pour éviter de casser l'OS: sudo pip3 cible le même /usr/lib/python3/dist-packages répertoire où APT magasins OS-sensibles modules. Récente de Debian/Ubuntu rejets dépendent fortement de Python 3, de sorte que son pré-installé les modules sont gérés par apt et ne devrait pas être modifié.

Donc, si vous utilisez pip3 install de commande, veuillez vous assurer qu'il fonctionne dans un virtuel isolé environnement de dev, comme avec virtualenv (sudo apt install python3-virtualenv), ou avec Python3 intégré (-m venv), ou au niveau de l'utilisateur (--user pip option, par défaut dans Ubuntu fourni pip depuis 2016), mais pas à l'échelle du système (jamais sudo pip3!), parce que pip interfère avec le fonctionnement du gestionnaire de paquet APT et peut affecter Ubuntu OS composants lorsqu'un système utilisé module python est modifié de façon inattendue. Bonne chance!


P. S. Tous les est au-dessus de l '"idéal" de la solution (Debian/Ubuntu façon).

Si vous avez toujours souhaitez utiliser la nouvelle pip3 v10 exclusivement, il y a 3 solutions:

  • il suffit d'ouvrir une nouvelle session bash (un nouveau terminal de l'onglet ou de type bash) - et pip3 v10 devient disponible (voir pip3 -V). debian pip3 v8 reste installé mais est cassé; ou
  • la commande $ hash -d pip3 && pip3 -V pour actualiser pip3 chemin d'accès dans le $PATH. debian pip3 v8 reste installé mais est cassé; ou
  • la commande $ sudo apt remove python3-pip && hash -d pip3 pour désinstaller debian pip3 v8 complètement, en faveur de votre nouveau pip3 v10.

Remarque: Vous aurez toujours besoin d'ajouter --user indicateur pour toute non-debian-fourni pip, sauf si vous êtes dans un virtualenv! (il déploie les paquets python pour ~/.local/, par défaut dans debian/ubuntu-fourni python3-pip et python-pip depuis 2016). Votre utilisation de pip à 10 à l'échelle du système, en dehors de virtualenv, n'est pas vraiment pris en charge par Ubuntu/Debian. Jamais sudo pip3!

Plus de détails:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

49voto

Saket Points 766

résolu en une seule étape.

J'ai moi aussi été confronté à ce problème, Mais cela peut être résolu simplement en 1 commande sans se soucier autour de et de perdre du temps et je l'ai essayé sur plusieurs systèmes, c'est la solution la plus propre pour cette question. Et c'est:

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

Par la présente , vous pouvez simplement installer des paquets à l'aide de pip3. pour vérifier l'utilisation de pip3 --version.

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

Par la présente, maintenant, vous pouvez simplement installer des paquets à l'aide de pip. pour vérifier l'utilisation de pip --version.

35voto

Ciro Santilli Points 3341

Utiliser python -m pip install au lieu de pip install

Exemple:

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

L' pip (resp. pip3) exécutable est fourni par votre distribution (python-pip paquet sur Ubuntu 16.04) et situé à l' /usr/bin/pip.

Par conséquent, il n'est pas tenu à jour avec l' pip package lui-même que vous mettez à niveau pip, et peuvent se briser.

Si vous venez d'utiliser python -m pip directement, par exemple dans:

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

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

Il s'appuie sur le fait que ce fichier est exécutable par le biais import, mais c'est un très type standard de l'interface, et donc moins susceptibles de se briser que les hackier Debian script.

Ensuite, je recommande d'ajouter le suivant alias à votre .bashrc:

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

L'Ubuntu 18.04 /usr/bin/pip3 le fichier n':

from pip import main

et, vraisemblablement, main a été retiré de pip à un certain point, qui est ce qui a cassé des choses.

La rupture pip commettre semble être: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Déplacer tous les Api de pip._internal" qui est entré en pip 18.0.

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

pyenv

En fin de compte cependant, pour de graves Python de développement, je voudrais juste vous recommandons d'installer votre propre local Python avec pyenv + virtualenv, ce qui permettrait de contourner cette Ubuntu bug: https://askubuntu.com/questions/682869/how-do-i-install-a-different-python-version-using-apt-get/1195153#1195153

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X