51 votes

Fichier "/ usr / bin / pip", ligne 9, dans <module> depuis pip importation principale ImportError: impossible d'importer le nom principal

J'essaie d'exécuter une page Web à l'aide de la fiole python et de la connecter à la base de données de MySQL et lors de l'installation des packages MySQL, je reçois cette erreur.

entrez la description de l'image ici

Je fais cela sur ec2 Linux AWS.

82voto

Alex C. Points 2639

TL;DR

  1. L '"idéal" de la solution (Ubuntu/Debian):
    $ python -m pip uninstall pip désinstaller le nouveau pip 10 et conserver votre Ubuntu/Debian-fourni patché pip 8. Pour un système à l'échelle de l'installation des modules utiliser apt dans la mesure du possible (sauf si vous êtes dans un virtualenv), de plus en plus sur elle-dessous. Dans les anciennes Ubuntu/Debian, toujours ajouter --user drapeau lors de l'utilisation de pip à l'extérieur de virtualenvs (s'installe en ~/.local/, par défaut de python-pip et python3-pip depuis 2016).

  2. Si vous avez toujours souhaitez utiliser la nouvelle pip 10 exclusivement, il y a 3 solutions:

    • il suffit de ré-ouvrir une nouvelle session bash (un nouveau terminal de l'onglet ou de type bash) - et pip 10 est disponible (voir pip -V). debian pep 8 est installé mais est cassé; ou
    • $ hash -d pip && pip -V pour actualiser pip chemin d'accès dans le $PATH. debian pep 8 est installé mais est cassé; ou
    • $ sudo apt remove python-pip && hash -d pip (pour Python 3, c'est python3-pip) -- pour désinstaller debian pep 8 complètement, en faveur de votre nouveau pip 10.

Remarque: Vous aurez toujours besoin d'ajouter --user indicateur de non-debian-fourni pip 10, 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 pris 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-381673100


Donc, ici, nous avons Python 2.7.12 dans Ubuntu 16.04 ec2 de la machine, et d'obtenir ImportError: impossible d'importer le nom principal lors de l'utilisation de pip. Elle est causée par l' pip install --upgrade pip commande: qui installe la dernière pip version 10 du côté d'Ubuntu par défaut du pip version de python-pip paquet debian à partir d'OS de distribution (le système d'installation de Python), court-circuitant ainsi complètement Ubuntu apt sous-système. Il rompt le Ubuntu par défaut du pip: debian-patché script de lancement de python-pip (système installé dans /usr/bin/pip*) essaie de faire de l'importation de main() de votre nouvellement installé pep de 10 la bibliothèque, mais avec un autre chemin d'importation, de sorte qu'il échoue.

Cette erreur est discuté plus en détail dans un développeur fil de la pip outil de suivi, y compris quelques-uns proposent des solutions, telles que:

  • L' $ hash -d pip commande: lors de l' hash est invoquée, le chemin d'accès complet du pip est déterminé par la recherche de répertoires dans le CHEMIN d'accès $et de souvenir. Tout se souvient chemin est rejetée. L' -d option provoque la coquille à "oublier" les rappeler de l'emplacement de la donnée nom du package; ou

  • De même, vous pouvez tout simplement ré-ouvrir une nouvelle session bash (un nouvel onglet terminal) pour actualiser pip chemin dans $PATH; ou

  • Vous pouvez simplement utiliser un versionnées pip2 commande (ou pip3 pour Python 3) au lieu de pip d'invoquer l'ancien système installé launcher /usr/bin/pip2 , alors que les pip script situé dans $HOME/.local/bin dir (pip, pip2, pip2.7) invoquera votre nouveau installés par l'utilisateur pip 10 version;

  • Vous pouvez également utiliser la version de Python commandes en combinaison avec l' -m interrupteur pour exécuter la copie appropriée de pip, par exemple:
    $ python2 -m pip install --user SomePackage # par défaut de 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 la nécessité d'une extension de PyPI, comme MySQL-python (module MySQLdb) ou un Flacon de MySQL, pour une version de Python. L' --user commutateur est nécessaire uniquement à l'extérieur de virtualenv.

  • Sinon, désinstaller un des deux pips – soit installés par l'utilisateur ou le système installé – pour résoudre le conflit:
    $ python -m pip uninstall pip – pour supprimer vos installé manuellement pip en faveur de la déjà installé Ubuntu-expédié la version de python-pip paquet debian (python3-pip pour Python 3); il est un peu vieux, mais il détecte et installe les derniers modules de PyPI très bien, et a un travail pip commande dans le $PATH par défaut; ou
    $ sudo apt-get remove python-pip – pour désinstaller Ubuntu-fourni pip en faveur de votre dernière pip 10; si elle n'est pas accessible via le court - pip de commande, il suffit d'ajouter votre $HOME/.local/bin répertoire de votre $variable d'environnement PATH pour utiliser pip de commande (voir ci-dessus).
    Remarque: Ubuntu 16.04 pip v8.1.1 et la dernière pip v10.0.1 produisent exactement la même PyPI indice de résultats de recherche et peut tirer les mêmes versions de module;

  • Enfin, vous pouvez ignorer les deux pips au total en faveur de l'APT, et d'installer les paquets Python à l'échelle du système de Ubuntu repo avec:
    $ apt search <python-package> # ou apt-cache search chez les plus âgés Ubuntu
    $ apt show <python-package> # par exemple, python-flacon
    $ sudo apt install <python-package> # ou sudo apt-get install
    Les paquets avec le préfixe python- sont pour Python 2; avec python3- sont pour Python 3.
    La norme apt-get méthode d'installation est peut-être ce dont vous avez besoin. Par exemple, dans votre cas:
    python-mysqldb - Python interface de MySQL <- une fourchette de MySQLdb == MySQL-python
    python-flask-sqlalchemy - SQL Alchimie de soutien
    python-pymysql - pur Python pilote MySQL
    En fait, python-colis de dépôt Ubuntu sont privilégiées chaque fois que possible, en particulier en cas de forte dépendance à un système ou lorsqu'il est utilisé à l'échelle du système. Bien sûr, la quantité de paquets Python en dépôt Ubuntu (quelques milliers!) est relativement faible par rapport à PyPI (et qu'une seule version de), parce que tous les systèmes d'exploitation référentiel est à la traîne légèrement derrière PyPI versions. Mais la hausse de l'APT est que tous les Ubuntu packages fournis ont subi des tests d'intégration dans Ubuntu, en plus de apt-get disparaît rapidement lourd dépendances comme C extensions automatiquement. Vous obtiendrez toujours le système de bibliothèques dont vous aurez besoin dans le cadre de l'apt install, 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 (ou certains des anciens) version du paquet, ou lorsqu'il ne peut être trouvé à PyPI, ou lorsque les modules doivent être isolés; puis pip est en effet plus de l'outil approprié. Si vous devez utiliser pip install commande sur Ubuntu au lieu de apt-get install, veuillez vous assurer qu'il fonctionne dans un virtuel isolé de l'environnement de développement, comme avec virtualenv (sudo apt-get install python-virtualenv), ou en utilisant un haut- venv module (disponible en python3 uniquement), ou au niveau de l'utilisateur (pip install --user option de commande), mais pas à l'échelle du système (jamais sudo pip!).

Remarque: à l'Aide de sudo pip de commande (avec l'accès root) sur Ubuntu/Debian devrait être évitée, car elle interfère avec le fonctionnement du système de gestionnaire de paquets (apt) et peut affecter Ubuntu OS composants lorsqu'un système utilisé python module est mis à jour de façon inattendue, en particulier par les dépendances sur un autre pip paquet. Il est conseillé de ne jamais utiliser un programme de changement à l'échelle du système les paquets Python, puisqu'elles sont gérées par apt-get sur Ubuntu.

36voto

Jose Serodio Points 563

Ces étapes ont travaillé pour moi.

1- Désinstaller le programme pep mise à jour de python.
2- Désinstaller pip package à partir de votre Ubuntu.
3- Vérifier que le pip binaire n'est pas plus longtemps dans votre système.

python -m pip uninstall pip
apt remove python-pip
whereis pip

4- Télécharger et installer pip. (crédits pour VanDragt.com)

wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
sudo python3 /tmp/get-pip.py
pip install --user pipenv
pip3 install --user pipenv
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.profile
source ~/.profile
whereis pip

Maintenant, vous devriez être en mesure d'installer un pip paquet que vous voulez.

10voto

Fabiano Tarlao Points 116

Mon cent, j'avais le même ImportError: cannot import name main .

Mon système est une distribution Linux Ubuntu , j'ai exécuté cette commande:

 python -m pip uninstall pip
 

Cela a supprimé une version locale (pour l'utilisateur) pip .

J'avais déjà un ancien exécutable système pip / pip2 ( apt-get installé dans les temps anciens) qui fonctionnait comme un charme.

2voto

markroxor Points 1025

Comme suggéré dans le programme pep de github problème

La solution temporaire est de -

Modifier votre /usr/bin/pip le fichier et mettez en commentaire la ligne de l'importation de principal et de le modifier

#from pip import main
from pip._internal import main as main

A fonctionné parfaitement pour moi. Note - c'est une solution temporaire. Attendre que l'équipe de pep à résoudre ce problème.

OU

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

pour cela:

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

Comme il est suggéré dans cette SORTE de réponse.

0voto

Javeed Shakeel Points 591

Essaye ça

Vérifiez la version python que vous utilisez

 # Python --version
 

et essayez d'installer par exemple si votre version est 2.7

 #python2.7 <package name> 
 

Fonctionnera bien ......

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