Fejl efter opgradering af pip: kan ikke importere navnet 'main'

Når jeg forsøger at installere en pakke ved hjælp af pip, får jeg denne importfejl:

guru@guru-notebook:~$ 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'


guru@guru-notebook:~$ 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 __name__ == '__main__':
    sys.exit(main())

Det fungerede fint tidligere, jeg er ikke sikker på, hvorfor det smider denne fejl. Jeg har søgt om denne fejl, men kan ikke finde noget til at rette den.

Lad mig vide, hvis du har brug for yderligere detaljer, jeg vil opdatere mit spørgsmål.

Løsning

Du må have opgraderet dit system pip utilsigtet (sandsynligvis gennem noget som sudo pip install pip --upgrade)

pip 10.x justerer, hvor dets interne elementer er placeret. Den pip3-kommando du ser er en der leveres af din pakkevedligeholder (formentlig debian-baseret her?) og er ikke en fil der administreres af pip.

Du kan læse mere om dette på [pip's issue tracker] (https://github.com/pypa/pip/issues/5221)

You'll sandsynligvis ønsker at ikke opgradere dit system pip og i stedet bruge en virtualenv.

For at gendanne den binære pip3 skal du sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Hvis du ønsker at fortsætte i "unsupported territory" (opgradering af en systempakke uden for systemets pakkehåndtering), kan du sandsynligvis slippe af sted med python3 -m pip ... i stedet for pip3.

Kommentarer (17)

Kontroller, om pip er blevet cachet på en anden sti, for at gøre det, kald $ which pip og kontroller, at stien er forskellig fra den, der er angivet i fejlen, hvis det er tilfældet, så kør:

$ hash -r

Når cachen er ryddet, vil pip fungere igen. reference: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Kommentarer (0)

Jeg bruger sudo apt remove python3-pip og så virker pip.

 ~ sudo pip install pip --upgrade
[sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    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  [options]
Kommentarer (1)