it-swarm.com.de

Fehler nach dem Upgrade von pip: Name "main" kann nicht importiert werden

Immer wenn ich versuche, ein Paket mit pip zu installieren, erhalte ich diesen Importfehler:

[email protected]:~$ 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'


[email protected]:~$ 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 __== '__main__':
    sys.exit(main())

Es hat gut funktioniert, ich bin mir nicht sicher, warum es diesen Fehler gibt ... Ich habe nach diesem Fehler gesucht, kann aber nichts finden, um ihn zu beheben.

Bitte lassen Sie mich wissen, wenn Sie weitere Einzelheiten benötigen, ich werde meine Frage aktualisieren.

232
g_p

Sie müssen Ihren Systempip versehentlich aktualisiert haben (wahrscheinlich durch etwas wie Sudo pip install pip --upgrade)

pip 10.x passt die Position der inneren Elemente an. Der pip3-Befehl, den Sie sehen, wird von Ihrem Paketbetreuer bereitgestellt (vermutlich hier auf Debian-Basis?) Und ist keine von pip verwaltete Datei.

Mehr dazu lesen Sie auf pips Issue Tracker

Wahrscheinlich möchten Sie not Ihren System-Pip aktualisieren und stattdessen eine virtualenv verwenden.

Um die pip3-Binärdatei wiederherzustellen, müssen Sie Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall.

Wenn Sie in "nicht unterstütztem Gebiet" fortfahren möchten (Upgrade eines Systempakets außerhalb des Systempaketmanagers), können Sie wahrscheinlich mit python3 -m pip ... anstelle von pip3 fortfahren.

494
Anthony Sottile

Der Fehler kann durch Ändern der Pip-Datei behoben werden.

Überprüfen Sie den Speicherort der Datei:

$ which pip

pfad ->/usr/bin/pip

Gehe zu diesem Ort /usr/bin/pip und öffne ein Terminal.

Eingeben: $ Sudo nano pip

Du kannst sehen:

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

Ändern:

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

dann Ctrl + O Schreiben Sie die Änderungen und beenden Sie.

Hoffe das wird gehen !!

71
vijay athithya

Für Benutzer der Ubuntu-Familie, Debian, Linux Mint

Dank Anthonys Erklärung above können Sie Ihren ursprünglichen System-Pip (in/usr/bin/und dist-packages /) beibehalten und den manuell installierten Pip (in ~/.local /) entfernen, um das Problem zu beheben Konflikt:

$ python3 -m pip uninstall pip

Ubuntu/Debian pip v8.1.1 (16.04) aus dem python3-pip-Debian-Paket (siehe$ pip3 -V) zeigt die gleichen Suchergebnisse wie der neueste pip v10.0.1 und installiert die neuesten Module von PyPI. Es hat einen funktionierenden pip - Befehl (bereits im $ PATH) sowie die seit 2016 standardmäßig gepatchte Nice --user -Option. In den pip-Versionshinweisen geht es bei den neueren Versionen hauptsächlich um benutzerfallspezifische Fehlerbehebungen und bestimmte neue Funktionen, sodass nicht jeder gerade noch ein Rush-Upgrade durchführen muss. Außerdem kann der neue Pip 10 auf jeden Fall auf Python virtuellen Rechnern bereitgestellt werden.

Unabhängig von Pips ermöglicht Ihr Betriebssystem die schnelle Installation gängiger Python - Module (einschließlich Numpy) mit APT, ohne dass Pip erforderlich ist. Beispiel:
$ Sudo apt install python3-numpy python3-scipy (mit Systemabhängigkeiten)
$ Sudo apt install python3-pip (Debian-gepatchter Pip, etwas älter, aber es spielt keine Rolle)

Schnelle Erinnerung an die passende Syntax (Einzelheiten finden Sie unter man apt):
$ Sudo apt update (um Ubuntu-Paketindexdateien von aktuellen Quellen neu zu synchronisieren)
$ apt search <python-package-name> (Volltextsuche für alle verfügbaren Pakete)
$ apt show <python-package-name> (zeigt die detaillierte Paketbeschreibung an)
$ Sudo apt install <python-package-name>

Paketnamen mit dem Präfix python- sind für Python 2; und mit dem Präfix python3- sind für Python 3 (z. B. python3-pandas). Es gibt Tausende und sie werden Integrationstests in Debian und Ubuntu unterzogen. Sofern Sie nicht versuchen, die Installation auf Benutzerebene (pip install --user-Option) oder in virtualenv/venv durchzuführen, könnte apt genau das sein, was Sie benötigen. Auf diese Systempakete kann auch von virtuellen Umgebungen aus zugegriffen werden, da virtualenv ordnungsgemäß auf die Verwendung von Systembibliotheken beim Import zurückgreift, wenn Ihre Umgebungen keine Kopien von Modulen angegeben haben. Ihre benutzerdefinierten (mit pip --user) benutzerspezifischen Module in ~/.local/lib überschreiben diese ebenfalls.

Da es sich um eine systemweite Installation handelt, müssen Sie diese selten entfernen (Sie müssen die Betriebssystemabhängigkeiten berücksichtigen). Dies ist praktisch für Pakete mit vielen Systemabhängigkeiten (z. B. mit scipy oder matplotlib), da APT alle erforderlichen Systembibliotheken und C-Erweiterungen verfolgt und bereitstellt, während Sie mit pip keine solchen Garantien haben .

Tatsächlich erwartet Ubuntu für systemweite Python -Pakete (im Gegensatz zu Paketen pro Benutzer, Basisverzeichnisebene oder niedriger) unter Verwendung des APT -Paketmanagers (anstelle von Sudo pip), um das Brechen des Betriebssystems zu vermeiden: Sudo pip3 zielt auf dasselbe /usr/lib/python3/dist-packages-Verzeichnis ab, in dem APT betriebssystemsensitive Module speichert. Aktuelle Debian/Ubuntu-Versionen hängen stark von Python 3 ab, daher werden die vorinstallierten Module von apt verwaltet und sollten nicht geändert werden.

Wenn Sie also den Befehl pip3 install verwenden, stellen Sie sicher, dass er in einer isolierten virtuellen Entwicklungsumgebung ausgeführt wird, z. B. mit virtualenv (Sudo apt install python3-virtualenv) oder mit integriertem Python3 (-m venv) oder auf Benutzerebene (--user pip-Option, Standardeinstellung in Ubuntu-bereitgestellten pip seit 2016), aber nicht systemweit (nie Sudo pip3!), Da pip den Betrieb des APT Paketmanager und kann Ubuntu OS components betreffen, wenn ein vom System verwendetes python Modul unerwartet geändert wird. Viel Glück!


P. S. Alles oben Genannte ist für die "ideale" Lösung (Debian/Ubuntu Weg).

Wenn Sie noch ausschließlich das neue pip3 v10 verwenden möchten, gibt es drei schnelle Problemumgehungen:

  • öffnen Sie einfach eine neue Bash-Sitzung (ein neues Terminal-Register oder geben Sie bash ein) - und pip3 v10 wird verfügbar (siehe pip3 -V). debians pip3 v8 bleibt installiert, ist aber defekt; oder
  • den Befehl $ hash -d pip3 && pip3 -V, um den pip3-Pfadnamen im $ PATH zu aktualisieren. debians pip3 v8 bleibt installiert, ist aber defekt; oder
  • den Befehl $ Sudo apt remove python3-pip && hash -d pip3, um debians pip3 v8 vollständig zugunsten Ihres neuen pip3 v10 zu deinstallieren.

Hinweis: Sie müssen jedem nicht von Debian bereitgestellten Pip immer das Flag --user hinzufügen, es sei denn, Sie befinden sich in einer virtuellen Umgebung! (Es stellt python Pakete für ~/.local/ bereit, Standard in Debian/Ubuntu-Python3-Pip und Python-Pip seit 2016). Ihre Verwendung von pip 10 im gesamten System außerhalb von virtualenv wird von Ubuntu/Debian nicht wirklich unterstützt. Niemals Sudo pip3!

Weitere Details:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

58
Alexey C.

nur in einem Schritt gelöst.

Ich habe mich auch mit diesem Problem konfrontiert, aber dieses Problem kann einfach durch einen Befehl gelöst werden, ohne Zeit zu verschwenden und Zeit zu verlieren. Und das ist:

Für Python3: - Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall.

Auf diese Weise können Sie Pakete einfach mit pip3 installieren. Um zu überprüfen, verwenden Sie pip3 --version.

Verwenden Sie für ältere Versionen: Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall.

Jetzt können Sie Pakete einfach mit pip installieren. Um zu überprüfen, verwenden Sie pip --version.

27
Saket

Verwenden Sie python -m pip install anstelle von pip install

Beispiel:

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

Die ausführbare Datei pip (bzw. pip3) wird von Ihrer Distribution (python-pip-Paket unter Ubuntu 16.04) bereitgestellt und befindet sich unter /usr/bin/pip.

Daher wird das Paket pip während des Upgrades von pip nicht auf dem neuesten Stand gehalten und kann beschädigt werden.

Wenn Sie nur python -m pip direkt verwenden, z. wie in:

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

sie durchläuft Ihren Python-Pfad, findet die neueste Version von pip und führt diese Datei aus.

Es beruht auf der Tatsache, dass diese Datei über import ausführbar ist, aber dies ist eine sehr standardisierte Art von Schnittstelle und daher weniger wahrscheinlich als das hackere Debian-Skript.

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

pip() ( python -m pip "[email protected]" )
pip3() ( python3 -m pip "[email protected]" )

In Ubuntu 16.04 nach einem Update von pip3 9.0.1 auf 18.0 getestet.

Überprüfen Sie, ob pip auf einem anderen Pfad zwischengespeichert wurde. Rufen Sie dazu $ which pip auf und prüfen Sie, ob der Pfad sich von dem im Fehler angegebenen unterscheidet.

$ hash -r

Wenn der Cache leer ist, wird pip wieder funktionieren . Reference: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file -oder-verzeichnis

13
Sr.PEDRO

Ich laufe auf einem System, bei dem ich Sudo apt, aber keinen Sudo Pip habe. (Und kein su Zugang.) Ich bin in die gleiche Situation geraten, indem ich den Rat von pip befolgte: 

Sie verwenden die Pip-Version 8.1.1, jedoch ist 18.0 verfügbar. Sie sollten ein Upgrade über den Befehl "pip install --upgrade pip" erwägen.

Keine der anderen Korrekturen funktionierte für mich, da ich nicht über ausreichende Administratorrechte verfügte. Ein paar Dinge steckten jedoch bei mir, weil ich davon gelesen hatte:

  • Ich hätte das nicht tun sollen. Klar, sagte Pip dazu. Es hat gelogen.
  • Die Verwendung von --user löst viele Probleme, indem der Fokus auf das Verzeichnis der Benutzer gerichtet wird.

Also fand ich diese Befehlszeile, um mich wieder dort zu befinden, wo ich war. Wenn Sie eine andere Version als 8.1.1 verwendet haben, möchten Sie diesen Teil der Zeile natürlich ändern.

python -m pip install --force-reinstall pip==8.1.1 --user

Das ist das einzige, was für mich funktioniert hat, aber es hat perfekt funktioniert!

7

Sie können dieses Problem beheben, indem Sie pip erneut installieren.

Verwenden Sie den folgenden Code, um pip erneut zu installieren

Für Python2:

python -m pip uninstall pip && Sudo apt install python-pip --reinstall

Für Python2:

 python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
5
Codemaker

Die obigen Befehle funktionierten nicht für mich, aber diese waren sehr hilfreich:

Sudo apt purge python3-pip
Sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
Sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
Sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
Sudo rm -rf pip*  
Sudo pip3 install jupyter
3
Pierrot

Auf meinem Ubuntu 16.04-System bin ich auf dasselbe Problem gestoßen. Ich konnte das Problem beheben, indem ich pip mit folgendem Befehl neu installierte:

curl https://bootstrap.pypa.io/get-pip.py | Sudo python3

2
jkjung13

Ich benutze Sudo apt remove python3-pip, dann funktioniert pip

 ~ Sudo pip install pip --upgrade
[Sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'
➜  ~ Sudo apt remove python3-pip   
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
  python3.5-dev
Use 'Sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜  ~ pip

Usage:   
  pip <command> [options]
2
jim gabriel

Dasselbe ist mir auf Pixelbook mit dem neuen LXC (strech) passiert. Diese Lösung ist der akzeptierten sehr ähnlich, mit einem geringfügigen Unterschied, der festes pip3 für mich bedeutete.

Sudo python3 -m pip install --upgrade pip

Das stieß die Version an und jetzt funktioniert es wie erwartet.

Ich habe es hier gefunden ... Python.org: Stellen Sie sicher, dass pip auf dem neuesten Stand ist

2
fliptopbox

Wiederherstellen mit python3 -m pip install --user pip==9.0.1 (oder der funktionierenden Version)

2
Claire

Bei der Verwendung von pip3 konnte ich den Fehler beheben:

Sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

Funktioniert alles:

 [email protected]:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 [email protected]:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 [email protected]:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

Vielleicht aktualisiert die neue Version 10.0.1 von pip die Binärdatei in/usr/bin nicht?

1
cryptoboy

Für Python Version 2.7 funktioniert die @Anthony-Lösung perfekt, indem Sie python3 in python wie folgt ändern:

Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall
1
ewalel

Trick und funktioniert auch

Sudo -H pip install lxml

1
Tejas Tank

Ich hatte den gleichen Fehler, aber python -m pip arbeitete immer noch, also habe ich ihn mit der nuklearen Option Sudo python -m pip install --upgrade pip behoben. Es hat es für mich getan.

0
Sergiu

Dieser Fehler kann eine Erlaubnis sein. Testen Sie also die Ausführung des Befehls mit -H flag:

Sudo -H pip3 install numpy
0
Mohsen Abasi

Wie @cryptoboy sagte - prüfen Sie, welche Pip/Python-Version Sie installiert haben

 [email protected]:~$ pip -V
 [email protected]:~$ pip2 -V
 [email protected]:~$ pip3 -V

suchen Sie dann nach nicht benötigten Bibliotheken in Ihrem Ordner .local/lib /.

Ich habe ein Backup der Einstellungen gemacht, als ich zu neuerem Kubuntu migrierte und den Ordner .local/lib/python2.7/in meinem Home-Verzeichnis hatte. Installierter Python 3.6. Ich habe gerade den alten Ordner entfernt und jetzt funktioniert alles super!

0
Vergil333

burschen! Ich habe das gleiche Problem und habe es gelöst. Hier ist meine Lösung . Als ich zuerst pip install etwas ausgeführt habe, kam der Fehler wie folgt heraus:

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

Also cd ich in die Datei/usr/bin/und cat pip3, um den Code darin zu sehen. Ich sehe das darin:

#!/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 __== '__main__':
    sys.exit(main())

Und dann denke ich, dass es nicht im Installationspfad lag. So cd ich in den Python3-Pip, wie folgt:

cd /.local/lib/python3.5/site-packages/pip

ps: Sie müssen in Ihrem Computer in die richtige Richtung cd Dann klickt ich die Datei, um die Unterschiede zu sehen (Sie können andere Operationen verwenden, um den Code zu sehen):

cat __main__.py

Und ich habe das gesehen:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

if __== '__main__':
    sys.exit(_main())

Kannst du den Unterschied sehen? Ich kann herausfinden, dass ich die Datei mit der Datei in/usr/bin/pip3 identisch machen muss

Also habe ich den Code in /.local/lib/python3.5/site-packages/pip eingefügt, um den Code in /usr/bin/pip3 zu ersetzen, und das Problem verschwindet!

ps: pip3 oder pip haben in diesem problem keinen unterschied ... Ich würde mich freuen, wenn meine Lösung Ihr Problem löst!

0
lin pan
python3.6 -m pip install scipy 

installiere mit dem obigen Befehl in ein bestimmtes Verzeichnis, :)

0
vishal

In Ubuntu 18.04.1 Bionic Beaver müssen Sie sich abmelden und erneut anmelden (kein Neustart erforderlich), um die richtige Umgebung zu erhalten.

$ Sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

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

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
0
Jeff Hoye

importiere main aus pip._internal

from pip._internal import main

Bearbeiten Sie den Pip-Code von

Sudo nano /usr/bin/pip3
0
Akhilesh N S

Für das, was es wert ist, hatte ich das Problem mit pip (nicht pip2 oder pip3):

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

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

Irgendwie (ich kann mich nicht erinnern wie) hatte ich python Sachen in meinem ~/.local Verzeichnis installiert. Nachdem ich das Pip-Verzeichnis von dort entfernt hatte, fing pip wieder an zu arbeiten.

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
0
Michael Burr

Unter Debian müssen Sie zuerst apt aktualisieren.

Sudo apt-get update -qq
Sudo apt-get install python-pip -qq
Sudo pip install pip --upgrade --quiet
Sudo pip2 install virtualenv --quiet

Wenn Sie "Sudo apt-get update -qq" überspringen, wird Ihr PIP beschädigt und der Fehler "Kann Haupt nicht finden" wird angezeigt.

0
Paul Kenjora