Exécution de Pip3 ImportError: impossible d'importer le nom «principal»

21

Je souhaite installer Scipy (Numpy est déjà installé). J'ai Python 3.5.1-3 installé avec OS et IDLE3 (3.5.2). Quand je frappe dans le terminal

sudo pip3 install scipy

Il imprime

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

J'ai déjà essayé de réinstaller pip3 et de redémarrer le système d'exploitation, mais cela n'a pas changé. Pip3 a-t-il travaillé bizarrement avec quelqu'un d'autre?

Le chien de porc inversible
la source

Réponses:

10

numpy et scipy sont dans les référentiels par défaut de toutes les versions actuellement prises en charge d'Ubuntu. Pour installer numpy et scipy pour Python 3.x, ouvrez le terminal et tapez:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

Pour Python 2.x, c'est:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy python-scipy
Karel
la source
1
python3-scipy a très bien fonctionné. Merci!
The Invertible Hog Dog
1
Comme une autre réponse l'indique, cette réponse n'est pas liée au problème sous-jacent, qui a à voir avec pip.
cjauvin
C'est une mauvaise méthode ...
darkwoolf
26

Utiliser python -m pip installau lieu depip install

Exemple:

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

J'ai commencé à avoir ce problème après une pipmise à niveau:

pip install --upgrade --user pip

L' exécutable pip(resp. pip3) Est fourni par votre distribution ( python-pippackage sur Ubuntu 16.04).

Par conséquent, il n'est pas mis à jour avec le pippackage lui-même lors de la mise à niveau de pip et peut se casser.

Si vous utilisez simplement python -m pipdirectement, par exemple comme dans:

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

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

Il repose sur le fait que ce fichier est exécutable, mais il s'agit d'un type d'interface très standard, et donc moins susceptible de se casser que le script Debian plus pirate.

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

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

Le /usr/bin/pip3fichier Ubuntu 18.04 fait:

from pip import main

et a probablement mainété retiré pipà un moment donné qui est ce qui a brisé les choses.

La rupture de la validation pip semble être: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Déplacer toutes les API internes vers pip._internal" qui est entré dans pip 18.0.

Testé dans Ubuntu 16.04 après une mise à jour de pip39.0.1 à 18.0.

pyenv

En fin de compte, cependant, pour un développement Python sérieux, je recommanderais simplement d'installer votre propre Python local avec pyenv + virtualenv, qui contournerait également ce bogue Ubuntu: Comment installer une version Python différente en utilisant apt-get?

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
1
Donc ça marche, mais je ne peux pas être le seul à secouer la tête ici. Où est la panne? Pourquoi la mise à niveau par défaut du pip ne parvient-elle pas à configurer le nouveau pip de manière à ce qu'il continue de fonctionner?
Steven Lu
@StevenLu d'après ce que je comprends, il /usr/bin/pipest fourni par un package Ubuntu Python et pipne le remplace pas. Mais le pip updateest géré par piplui-même, et évite de toucher aux fichiers Ubuntu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Salut ho même expérience ici. Pip3 ne fonctionnerait PAS, peu importe ce que j'ai fait. Cette solution fonctionne, mais comment se fait-il ?? Le script pip python est préparé par Debian- Le commentaire dit: 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. Peut - être qu'il existe un moyen d'installer Python correctement d'une manière python.
le
@will Je ne suis pas sûr de ce commentaire de documentation, mais je suis sûr de ce que fait le code /usr/bin/pip:-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
20

Le bogue se trouve dans pip 10.0.0.

Sous Linux, vous devez modifier le fichier: / usr / bin / pip à partir de:

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

pour ça:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())
Herman
la source
Ce style de solution de contournement ne semble pas recommandé par l' pipéquipe.
jdk1.0
Tu m'as sauvé la journée !!
Saurabh Singh
8

J'ai eu le même problème, mais désinstaller et réinstaller avec apt et pip n'a pas fonctionné 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
Hamza Ali
la source
Cela a rétrogradé ma version de pip3 de 19.0.3 à 8.1.1, mais cela a résolu le problème.
Hawkeye Parker
6

Bien que karel ait résolu votre problème "installer numpy et scipy", ce qui ne va pas avec pip sur votre système n'a pas été résolu, vous aurez donc probablement plus de problèmes avec pip à l'avenir.

En regardant ici , il semble que ce soit un problème récent assez courant avec pip 10 sur les systèmes Ubuntu. Vous pouvez trouver des solutions à ce problème qui fonctionnent pour vous, mais j'espère qu'une mise à jour le corrigera bientôt.

JMAA
la source
Merci d'avoir réellement réglé le problème et de ne pas avoir
Caleb Fenton
3

L'installation de pip à partir d'apt et de pip lui-même peut provoquer cela.

Dans mon cas, j'ai utilisé le paquet pip d'Ubuntu pour installer pipenv qui a ensuite installé une nouvelle copie de pip. Maintenant, car mon shell exécute le script pip 9 d'Ubuntu (pour vérifier l'exécution which pip3) et mon interprète Python importe ensuite le module pip 10, la commande pip3 échoue. Je veux donc désinstaller l'un des deux.

Il est juste de supposer que vous avez le nouveau pip pour une raison. Dans ce cas, vous souhaitez désinstaller l'ancien pip comme ceci:

sudo apt remove python3-pip

Si vous savez avec certitude que vous êtes bien avec l'ancien pip et préférez le package système, vous voudrez désinstaller le plus récent:

~/.local/bin/pip3 uninstall pip

ou à défaut

sudo /usr/local/bin/pip3 uninstall pip

Jeff C
la source
1

type

hash -d pip3

Cela devrait supprimer cette erreur

Bob
la source
3
Pourriez-vous donner plus d'explications sur votre réponse: qu'est-ce que le «hachage» et pourquoi supprimerait-il l'erreur?
Marc Vanhoomissen
1

Forcer la réinstallation de pip fonctionne très bien pour la plupart des utilisateurs, comme indiqué sur cette page github:

python -m pip install --force-reinstall pip
subtleseeker
la source
Merci. Toutes les réponses précédentes ont lamentablement échoué, alors que la vôtre a fonctionné
Pynchia
0

Mon problème a fini par être un décalage entre python3.6 et 3.7. L'installation de python3.6 a mis un lien /usr/bin/python3 -> /usr/bin/python3.6même si le système était passé à python3.7.

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version
Gregory Alan Bolcer
la source
-1

Cela a fonctionné pour moi:

pip install --upgrade --user pip

Par install --upgrade, je veux dire tout ce que vous essayez d'installer.

Alex Jolig
la source