Fout na het upgraden van pip: kan naam 'main&#39. niet importeren;

Telkens als ik een pakket probeer te installeren met pip, krijg ik deze importfout:

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())

Het werkte eerder goed, ik weet niet zeker waarom het nu deze fout geeft. Ik heb gezocht naar deze fout, maar kan niets vinden om het op te lossen.

Laat het me weten als je meer details nodig hebt, ik zal mijn vraag bijwerken.

Oplossing

Je moet per ongeluk je systeem pip ge-upgrade hebben (waarschijnlijk door iets als sudo pip install pip --upgrade)

pip 10.x past aan waar zijn internals zich bevinden. Het pip3 commando dat je ziet is er een geleverd door je pakketbeheerder (vermoedelijk debian gebaseerd hier?) en is geen bestand beheerd door pip.

Je kan hier meer over lezen op pip's issue tracker

Je'zult waarschijnlijk je systeem pip niet willen upgraden en in plaats daarvan een virtualenv gebruiken.

Om de pip3 binary terug te krijgen moet je sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Als je verder wilt gaan in "unsupported territory" (het upgraden van een systeem pakket buiten de systeem package manager om), kun je waarschijnlijk wegkomen met python3 -m pip ... in plaats van pip3.

Commentaren (17)

Controleer of pip gecached is op een ander pad, om dit te doen, roep $ which pip aan en controleer of het pad verschillend is van het pad in de foutmelding, als dat'het geval is, voer uit:

$ hash -r

Wanneer de cache leeg is, zal pip weer werken. referentie: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Commentaren (0)

Ik gebruik sudo apt remove python3-pip dan werkt 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]
Commentaren (1)