Błąd po aktualizacji pip: nie można zaimportować nazwy 'main'

Ilekroć próbuję zainstalować dowolny pakiet za pomocą pip, otrzymuję ten błąd 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())

Wcześniej działało to dobrze, nie jestem pewien dlaczego wyrzuca ten błąd. Szukałem informacji o tym błędzie, ale nie mogę znaleźć niczego, co mogłoby go naprawić.

Proszę dać mi znać, jeśli potrzebujesz dalszych szczegółów, zaktualizuję moje pytanie.

Rozwiązanie

Musiałeś nieumyślnie zaktualizować swój system pip (prawdopodobnie przez coś takiego jak sudo pip install pip --upgrade)

pip 10.x dostosowuje się do tego, gdzie znajdują się jego elementy wewnętrzne. Polecenie pip3, które widzisz jest jednym z dostarczonych przez opiekuna pakietu (przypuszczalnie debian oparty tutaj?) i nie jest plikiem zarządzanym przez pip.

Możesz przeczytać więcej na ten temat na pip's issue tracker

Prawdopodobnie będziesz chciał nie uaktualniać swojego systemowego pip i zamiast tego użyć virtualenv.

Aby odzyskać binarny pip3 będziesz musiał sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Jeśli chcesz kontynuować na "nieobsługiwanym terytorium" (uaktualnianie pakietu systemowego poza systemowym menedżerem pakietów), prawdopodobnie możesz uciec z python3 -m pip ... zamiast pip3.

Komentarze (17)

Sprawdź, czy pip został zbuforowany na innej ścieżce, w tym celu wywołaj $ which pip i sprawdź, czy ścieżka jest inna niż ta, która została podpowiedziana w błędzie, jeśli tak'e jest, uruchom program:

$ hash -r

Gdy pamięć podręczna zostanie wyczyszczona, pip znów będzie działał. odnośnik: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Komentarze (0)

Używam sudo apt remove python3-pip wtedy pip działa.

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