Ausführen von Pip3 ImportError: Name 'main' kann nicht importiert werden


21

Ich möchte Scipy installieren (habe bereits Numpy installiert). Ich habe Python 3.5.1-3 mit OS und IDLE3 (3.5.2) installiert. Als ich im Terminal anschlug

sudo pip3 install scipy

Es wird ausgedruckt

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

Ich habe bereits versucht, pip3 neu zu installieren und das Betriebssystem neu zu starten, aber es hat sich nicht geändert. Hat pip3 komisch mit jemand anderem zusammengearbeitet?

Antworten:


10

numpy und scipy sind in den Standard-Repositorys aller derzeit unterstützten Versionen von Ubuntu enthalten. Um numpy and scipy für Python 3.x zu installieren, öffnen Sie das Terminal und geben Sie Folgendes ein:

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

Für Python 2.x ist es:

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

1
python3-scipy hat prima funktioniert. Vielen Dank!
The Invertible Hog Dog

1
Wie in einer anderen Antwort angegeben, hat diese Antwort nichts mit dem zugrunde liegenden Problem zu tun, das mit pip zu tun hat.
Cjauvin

Es ist eine schlechte Methode ...
darkwoolf

25

Verwenden Sie python -m pip installanstelle vonpip install

Beispiel:

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

Nach einem pipUpgrade ist dieses Problem aufgetreten:

pip install --upgrade --user pip

Die pip(bzw. pip3) ausführbare Datei wird von Ihrer Distribution bereitgestellt ( python-pipPaket unter Ubuntu 16.04).

Daher wird es nicht mit dem pipPaket selbst auf dem neuesten Stand gehalten, während Sie pip aktualisieren, und kann brechen.

Wenn Sie nur python -m pipdirekt verwenden, zB wie in:

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

Es durchsucht Ihren Python-Pfad, findet die neueste Version von pip und führt diese Datei aus.

Es beruht auf der Tatsache, dass diese Datei ausführbar ist, dies jedoch ein sehr standardmäßiger Schnittstellentyp ist und daher weniger wahrscheinlich ist, dass sie kaputt geht als das hackerere Debian-Skript.

Dann empfehle ich, die folgenden Aliase zu Ihrem hinzuzufügen .bashrc:

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

Die Ubuntu 18.04- /usr/bin/pip3Datei macht:

from pip import main

und vermutlich mainwurde pipirgendwann davon abgezogen, was die Dinge kaputt machte.

Der Fehler beim Festschreiben des Pip lautet anscheinend: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Alle internen APIs nach pip._internal verschieben", der in Pip 18.0 eingegangen ist .

Getestet in Ubuntu 16.04 nach einem Update von pip39.0.1 auf 18.0.

pyenv

Letztendlich würde ich jedoch für eine ernsthafte Python-Entwicklung nur empfehlen, dass Sie Ihr eigenes lokales Python mit pyenv + virtualenv installieren, um diesen Ubuntu-Fehler zu umgehen: Wie installiere ich eine andere Python-Version mit apt-get?


1
Das funktioniert also, aber ich kann nicht der einzige sein, der meinen Kopf schüttelt. Wo ist die Aufteilung? Warum schlägt das standardmäßige Pip-Upgrade fehl, um den neuen Pip so einzurichten, dass er weiterhin funktioniert?
Steven Lu

Nach meinem Verständnis wird @StevenLu /usr/bin/pipvon einem Ubuntu-Python-Paket bereitgestellt und pipnicht überschrieben. Aber das pip updatewird von pipselbst verwaltet und vermeidet das Berühren von Ubuntu-Dateien.
Ciro Santilli 新疆 at 改造 法轮功 六四 六四

Hi ho gleiche Erfahrung hier. Pip3 würde NICHT funktionieren, egal was ich getan habe. Diese Lösung funktioniert, aber wie kommt es? Das Python-PIP-Skript wird vorbereitet von - DebianDer Kommentar sagt: 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. Vielleicht gibt es eine Möglichkeit, Python auf Python-Weise richtig zu installieren.
wird

@will Ich bin nicht sicher, über diese Dokumentation Kommentar, aber ich bin mir sicher, was der Code /usr/bin/piptut :-)
Ciro Santilli

20

Der Fehler ist in pip 10.0.0 zu finden.

Unter Linux müssen Sie die Datei / usr / bin / pip ändern von:

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

dazu:

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

Diese Art der Problemumgehung wird vom Team anscheinend nicht empfohlenpip .
jdk1.0

Du hast meinen Tag gerettet!!
Saurabh Singh

8

Ich hatte das gleiche Problem, aber die Deinstallation und Neuinstallation mit apt und pip hat bei mir nicht funktioniert.

Ich sah eine andere Lösung, die eine einfache Möglichkeit darstellt, den Pip3-Pfad wiederherzustellen:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

Dadurch wurde meine Version von pip3 von 19.0.3 auf 8.1.1 herabgestuft, aber das Symptom wurde behoben.
Hawkeye Parker

6

Karel hat möglicherweise Ihr Problem mit der Installation von "numpy and scipy" gelöst, aber was mit pip auf Ihrem System nicht stimmt, wurde noch nicht behoben, sodass Sie wahrscheinlich weitere Probleme mit pip haben werden.

Wenn Sie hier schauen , scheint es ein ziemlich häufiges Problem mit Pip 10 auf Ubuntu-Systemen zu sein. Möglicherweise finden Sie in diesem Thread einige Umgehungsmöglichkeiten, die für Sie funktionieren, aber hoffentlich wird sie durch ein Update bald behoben.


Vielen Dank, dass Sie das Problem tatsächlich behoben haben und keine Problemumgehung angegeben haben, die das Problem nur teilweise und nur für eine einzige Person löst ...
Caleb Fenton

1

Das Installieren von pip sowohl von apt als auch von pip selbst kann dies verursachen.

In meinem Fall habe ich das pip-Paket von Ubuntu verwendet, um pipenv zu installieren, das dann eine neuere Kopie von pip installiert hat. Da meine Shell Ubuntus Pip 9-Skript which pip3ausführt (um die Ausführung zu überprüfen ) und mein Python-Interpreter dann das Pip 10-Modul importiert, schlägt der Befehl pip3 fehl. Also möchte ich einen der beiden deinstallieren.

Es ist fair anzunehmen, dass Sie den neueren Pip aus einem bestimmten Grund haben. In diesem Fall möchten Sie den älteren Pip wie folgt deinstallieren:

sudo apt remove python3-pip

Wenn Sie sicher sind, dass Sie mit dem älteren Pip zurechtkommen und das Systempaket bevorzugen, möchten Sie das neuere deinstallieren:

~/.local/bin/pip3 uninstall pip

oder scheitern

sudo /usr/local/bin/pip3 uninstall pip


1

Art

hash -d pip3

Dies sollte diesen Fehler beseitigen


3
Könnten Sie Ihre Antwort näher erläutern: Was ist "Hash" und warum wird der Fehler dadurch behoben?
Marc Vanhoomissen

1

Die Neuinstallation von pip erzwingen funktioniert für die meisten Benutzer einwandfrei, wie auf dieser Github-Seite gezeigt:

python -m pip install --force-reinstall pip

Danke dir. Alle vorherigen Antworten scheiterten kläglich, während Ihre funktionierten
Pynchia

0

Mein Problem war letztendlich ein Missverhältnis zwischen Python 3.6 und 3.7. Bei der Installation von python3.6 wurde ein Link eingefügt, /usr/bin/python3 -> /usr/bin/python3.6obwohl das System auf python3.7 aktualisiert wurde.

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

-1

Das hat bei mir funktioniert:

pip install --upgrade --user pip

Durch install --upgrademeine ich , was Sie zu installieren versuchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.