Chyba po aktualizácii pip: nemožno importovať názov 'main'

Vždy, keď sa pokúšam nainštalovať akýkoľvek balík pomocou pipu, dostanem túto chybu importu:

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

Predtým to fungovalo dobre, nie som si istý, prečo to hádže túto chybu. Hľadal som o tejto chybe, ale nemôžem'nájsť nič, čo by ju opravilo.

Ak potrebujete ďalšie podrobnosti, dajte mi prosím vedieť, aktualizujem svoju otázku.

Riešenie

Museli ste neúmyselne aktualizovať systém pip (pravdepodobne cez niečo ako sudo pip install pip --upgrade)

pip 10.x upravuje umiestnenie svojich vnútorných komponentov. Príkaz pip3, ktorý vidíte, je príkaz poskytnutý správcom vášho balíka (pravdepodobne tu je založený na debiane?) a nie je to súbor spravovaný pipom.

Viac sa o tom dočítate na pip's issue tracker

Pravdepodobne budete chcieť neaktualizovať svoj systém pip a namiesto toho použiť virtualenv.

Ak chcete obnoviť binárny súbor pip3, budete musieť sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Ak chcete pokračovať na "nepodporovanom území" (aktualizácia systémového balíka mimo systémového správcu balíkov), pravdepodobne si vystačíte s python3 -m pip ... namiesto pip3.

Komentáre (17)

Skontrolujte, či bol pip uložený do vyrovnávacej pamäte na inej ceste, zavolajte $ which pip a skontrolujte, či sa cesta líši od cesty, ktorá bola uvedená v chybe, ak je to tak, spustite:

$ hash -r

Po vymazaní vyrovnávacej pamäte bude pip opäť fungovať. odkaz: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Komentáre (0)

Používam sudo apt remove python3-pip a potom pip funguje.

 ~ 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]
Komentáre (1)