Klaida po pip atnaujinimo: negalima importuoti vardo 'main'

Kai bandau įdiegti bet kokį paketą naudodamas pip, gaunu šią importo klaidą:

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

Anksčiau jis veikė gerai, nesu tikras, kodėl jis išmeta šią klaidą. Ieškojau informacijos apie šią klaidą, bet nieko neradau, kaip ją ištaisyti.

Praneškite man, jei reikia išsamesnės informacijos, atnaujinsiu savo klausimą.

Sprendimas

Turbūt netyčia atnaujinote savo sistemos pip (tikriausiai per kažką panašaus į sudo pip install pip --upgrade)

pip 10.x pakoreguoja savo vidinių funkcijų vietą. pip3 komanda, kurią matote, yra jūsų paketų prižiūrėtojo (tikriausiai debian pagrindu?) pateikta komanda, o ne pip valdomas failas.

Daugiau apie tai galite paskaityti pip's issue tracker

Tikriausiai norėsite neatnaujinti savo sistemos pip, o naudoti virtualenv.

Norėdami atkurti pip3 dvejetainį failą, turėsite sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Jei norite tęsti darbą "nepalaikomoje teritorijoje" (atnaujinti sistemos paketą ne per sistemos paketų tvarkyklę), tikriausiai galite išsisukti su python3 -m pip ... vietoj pip3.

Komentarai (17)

Patikrinkite, ar pip buvo įrašytas į talpyklą kitame kelyje, tam iškvieskite $ which pip ir patikrinkite, ar kelias skiriasi nuo klaidoje nurodyto kelio, jei taip, paleiskite:

$ hash -r

Kai talpykla bus išvalyta, pip vėl veiks. nuoroda: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Komentarai (0)

Aš naudoju sudo apt remove python3-pip, tada pip veikia.

 ~ 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]
Komentarai (1)