Помилка після оновлення pip: cannot import name '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())

Раніше він працював нормально, я не впевнений, чому він видає цю помилку. Я шукав про цю помилку, але не можу знайти нічого, щоб її виправити.

Будь ласка, дайте мені знати, якщо вам потрібна додаткова інформація, я оновлю своє запитання.

Рішення

Ви, мабуть, ненавмисно оновили ваш системний 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.

Якщо ви хочете продовжити на &quo ;непідтримуваної території&quo ; (оновлення системного пакета поза системного менеджера пакетів), то, ймовірно, можна обійтися python3 -m pip ... замість pip3.

Коментарі (17)

Перевірте, чи не закешований pip по іншому шляху, для цього викличте $ which pip і перевірте, чи шлях відрізняється від шляху, вказаного в помилці, якщо це так, то запустіть його:

$ hash -r

Коли кеш буде очищено, pip знову запрацює. посилання: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Коментарі (0)

Я використовую sudo apt remove python3-pip, тоді 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]
Коментарі (1)