web-dev-qa-db-fra.com

"ImportError: impossible d'importer le nom principal" après la mise à niveau vers pip 10.0.0 pour Python version 2.7.12 - Une seule version de Python est installée

J'ai reçu un message dans mon terminal lors de l'installation d'un logiciel: You are using pip version 8.1.1, however version 10.0.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

J'ai donc mis à jour la version pip: $ pip install --upgrade pip

Maintenant, je reçois cette erreur:

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

TL; DR

  1. La solution "idéale" (façon Ubuntu/Debian):
    $ python -m pip uninstall pip pour désinstaller le nouveau pip 10 et conserver votre pip corrigé fourni par Ubuntu/Debian 8. Pour une installation de modules à l'échelle du système utilisez apt dans la mesure du possible (sauf si vous êtes dans un virtualenv), plus à ce sujet ci-dessous. Dans les anciennes versions d'Ubuntu/Debian, ajoutez toujours --user flag lors de l'utilisation de pip en dehors de virtualenvs (installe dans ~/.local/, par défaut dans python-pip et python3-pip depuis 2016).

  2. Si vous encore souhaitez utiliser exclusivement le nouveau pip 10, il existe 3 solutions rapides:

    • rouvrez simplement une nouvelle session bash (un nouvel onglet de terminal, ou tapez bash) - et pip 10 devient disponible (voir pip -V). le pip 8 de debian reste installé mais est cassé; ou
    • $ hash -d pip && pip -V pour actualiser le chemin d'accès pip dans $ PATH. le pip 8 de debian reste installé mais est cassé; ou
    • $ Sudo apt remove python-pip && hash -d pip (pour Python 3 c'est python3-pip) - pour désinstaller complètement le pip 8 de Debian, en faveur de votre nouveau pip 10.

Remarque: Vous devrez toujours ajouter --user drapeau vers pip 10 non fourni par Debian, sauf si vous êtes dans un virtualenv! Votre utilisation de pip 10 à l'échelle du système, en dehors de virtualenv, n'est pas vraiment prise en charge par Ubuntu/Debian. Jamais Sudo pip!

Détails:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-3816731


Ubuntu 16.04 avec Python 2.7.12

Introduction :
Ironiquement, malgré la suggestion de pip lui-même d'effectuer une telle mise à niveau via le pip install --upgrade pip commande explicitement dans le terminal (ugh!), sa mise à jour n'est pas recommandée dans les distributions GNU/Linux préemballées. Ubuntu généralement attend en utilisant APT gestionnaire de paquets pour tout à l'échelle du système Python mises à jour du module/installe (y compris de pip lui-même), par exemple:
$ Sudo apt-get update (resynchroniser les fichiers d'index des packages Ubuntu à partir des sources)
$ apt-cache search <python-package-name> (recherche plein texte sur tous les packages disponibles)
$ apt-cache show <python-package-name> (affiche la description du package)
$ Sudo apt-get install python-numpy python-scipy python-matplotlib (installe facilement des modules lourds pour la science des données, résolvant automatiquement toutes les dépendances du système)
$ Sudo apt-get install ipython (installe le bloc-notes IPython que vous cherchiez)
$ Sudo apt-get install python-pip (installe/met à niveau pip vers la dernière version disponible dans le référentiel Ubuntu - généralement légèrement derrière pypi.org, mais cela n'a pas d'importance)
Si vous devez utiliser pip install commande sur Ubuntu/Debian au lieu de apt-get install, assurez-vous qu'il fonctionne de manière isolée et ne modifie pas les paramètres par défaut à l'échelle du système Python (n'utilisez jamais Sudo avec pip) - plus d'informations ci-dessous .

ImportError: impossible d'importer le nom principal
L'erreur est causée par le pip install --upgrade pip commande: qui installe la dernière version pip 10 à côté de la version pip par défaut d'Ubuntu à partir de python-pip paquet debian de la distribution du système d'exploitation (le système Python), contournant complètement le sous-système Ubuntu apt. -pip (installé par le système dans/usr/bin/pip *) tente d'importer main () depuis votre bibliothèque pip 10 nouvellement installée, mais avec un chemin d'importation différent, donc il échoue.

Cette erreur est discutée plus en détail dans un thread de développeur du tracker de problème pip, y compris quelques solutions proposées , telles que :

  • Le $ hash -d pip commande: lorsque hash est invoquée, le chemin d'accès complet de pip est déterminé en recherchant les répertoires dans $ PATH et mémorisé. Tout chemin d'accès précédemment mémorisé est supprimé. Le -d l'option fait que le shell "oublie" l'emplacement mémorisé du nom de package donné; ou

  • De même, vous pouvez simplement rouvrir une nouvelle session bash (un nouvel onglet de terminal) pour actualiser le chemin d'accès pip dans $ PATH; ou

  • Vous pouvez simplement utiliser pip2 commande (ou pip3 pour Python 3) au lieu de pip pour appeler l'ancien script pip installé par le système /usr/bin/pip2, alors que tout script de lancement de pip situé dans $HOME/.local/bin dir (pip, pip2, pip2.7) démarrera votre nouvelle version pip 10 installée par l'utilisateur;

  • Vous pouvez également utiliser les commandes versioned Python en combinaison avec les -m commutateur pour exécuter la copie appropriée de pip, par exemple:
    $ python2 -m pip install --user SomePackage # default Python 2
    $ python2.7 -m pip install --user SomePackage # spécifiquement Python 2.7
    C'est pratique si vous avez plusieurs versions de Python et avez besoin d'une extension de PyPI pour une version spécifique de Python. La --user le commutateur n'est requis que lorsque pip est utilisé à l'extérieur de virtualenv.

  • Ou, désinstallez l'un des deux pips - soit installé par l'utilisateur ou installé par le système - pour résoudre le conflit:
    $ python -m pip uninstall pip - pour supprimer votre pip installé manuellement en faveur de la version Ubuntu précédemment installée du paquet debian python-pip (python3-pip pour Python 3); elle est légèrement plus ancienne, mais il trouve et installe les derniers modules de PyPI très bien, et a une commande pip fonctionnelle dans le $ PATH par défaut; ou
    $ Sudo apt-get remove python-pip - pour désinstaller le pip fourni par Ubuntu en faveur de votre dernier pip 10; s'il n'est pas accessible via la commande short pip, ajoutez simplement votre $HOME/.local/bin dans votre variable d'environnement $ PATH pour utiliser la commande pip (voir ci-dessus).
    Remarque: Ubuntu 16.04 pip v8.1.1 et le dernier pip v10.0.1 produisent exactement les mêmes résultats de recherche d'index PyPI et peuvent tirer le mêmes versions de modules;

  • Enfin, vous pouvez ignorer complètement les deux pips en faveur d'APT et installer Python packages à l'échelle du système depuis le repo Ubuntu avec:
    $ apt search <python-package> # par exemple. python-pandas
    $ apt show <python-package> # par exemple. flacon en python
    $ Sudo apt install <python-package>
    Packages précédés de python- est pour Python 2; avec python3- sont pour Python 3.
    L'installation via apt-get peut être ce dont vous avez besoin, en fait, les packages python du référentiel Ubuntu sont de préférence chaque fois que possible, en particulier en cas de fortes dépendances du système ou lorsqu'ils sont utilisés à l'échelle du système . Bien sûr, la quantité de Python dans le référentiel Ubuntu (quelques milliers!) Est relativement plus petite par rapport à PyPI (et n'en a qu'une seule version), car tout référentiel OS est légèrement en retard sur PyPI Mais le côté positif de APT est que tous les paquets fournis par Ubuntu ont subi des tests d'intégration dans Ubuntu, plus apt-get résout rapidement les fortes dépendances comme les extensions C. Vous obtiendrez toujours tout système requis bibliothèques dans le cadre de l'installation d'apt, mais avec pip vous avez pas de telles garanties .
    APT peut ne pas être une option, cependant, si vous avez vraiment besoin de la dernière version du package (ou de certaines anciennes), ou quand elle ne peut être trouvée que chez PyPI, ou lorsque les modules doivent être isolés; alors pip est en effet l'outil le plus approprié. Si tu utilises pip install commande sur Ubuntu au lieu de apt-get install, veuillez vous assurer qu'il fonctionne dans un environnement de développement virtuel isolé, comme avec virtualenv (Sudo apt-get install python-virtualenv), ou un module venv intégré (disponible en python3 uniquement), ou au niveau par utilisateur (pip install --user option de commande), mais pas à l'échelle du système (jamais Sudo pip!).

Remarque: Utilisation de Sudo pip La commande (avec accès root) doit être évitée, car elle interfère avec le fonctionnement du gestionnaire de package système (apt) et peut affecter Ubuntu OS composants lorsqu'un système- utilisé python est mis à niveau de façon inattendue, en particulier par des dépendances sur un autre package pip. Il est conseillé de ne jamais utiliser Pip pour changer votre package à l'échelle du système Python packages, as ils sont gérés par apt-get sur Ubuntu.

8
Alex C.

J'ai implemment imploré la réponse @catalinpopescu de ImportError: impossible d'importer le nom principal lors de l'exécution de la commande pip --version dans windows7 32 bits

Trouvez le chemin de pip:

$ which pip

Modifier le fichier (choisissez votre éditeur préféré):

$ Sudo nano `which pip`

Puis modifiez les lignes @catalinpopescu a dit: Commentez/remplacez les lignes:

from pip import main
sys.exit(main())

à:

from pip import __main__
sys.exit(__main__._main())

Immédiatement, je passe à la version 10.0.1 de Pip, qui semble ne pas avoir cette erreur.

6
L. San

essayez de mettre à niveau le système pip

Sudo pip install --upgrade pip

installation de pip - mise à niveau pip

cela peut être utile

1
user9664112