Грешка след ъпгрейд на pip: не може да импортира името 'main'
Когато се опитвам да инсталирам някой пакет с помощта на pip, получавам тази грешка при импортиране:
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())
По-рано работеше добре, не съм сигурен защо хвърля тази грешка. Търсих за тази грешка, но не мога да намеря нищо, за да я поправя.
Моля, уведомете ме, ако имате нужда от допълнителни подробности, ще актуализирам въпроса си.
443
3
Сигурно по невнимание сте обновили системния си pip (вероятно чрез нещо като
sudo pip install pip --upgrade
)pip 10.x променя местоположението на вътрешните си устройства. Командата
pip3
, която виждате, е предоставена от поддържащия пакета (вероятно базиран на debian?) и не е файл, управляван от pip.Можете да прочетете повече за това в pip's issue tracker
Вероятно ще искате да не обновявате системния си pip, а да използвате virtualenv.
За да възстановите бинарния файл
pip3
, ще трябва даsudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
.Ако искате да продължите в "неподдържана територия" (обновяване на системен пакет извън системния пакетен мениджър), вероятно можете да се справите с
python3 -m pip ...
вместоpip3
.Проверете дали pip е бил кеширан на друг път, за да направите това, извикайте $ which pip и проверете дали пътят е различен от този, който е посочен в грешката, ако случаят е такъв, стартирайте:
Когато кешът бъде изчистен, pip ще заработи отново. Препратка: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
Използвам
sudo apt remove python3-pip
, след коетоpip
работи.