Використовуйте python -m pip installзамістьpip install
Приклад:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
Я почав отримувати цю проблему після pipоновлення:
pip install --upgrade --user pip
Виконавчий файл pip(відповідно pip3) надається вашим дистрибутивом ( python-pipпакет на Ubuntu 16.04).
Таким чином, він не pipоновлюється з самим пакетом під час оновлення pip і може зламатися.
Якщо ви просто використовуєте python -m pipбезпосередньо, наприклад, як:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
він проходить ваш шлях Python і знаходить останню версію pip та виконує цей файл.
Він покладається на те, що цей файл є виконуваним, але це дуже стандартний тип інтерфейсу, і тому менше шансів зламатись, ніж хакірський сценарій Debian.
Тоді рекомендую додати до свого псевдоніма такі .bashrc:
pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )
Файл Ubuntu 18.04 /usr/bin/pip3робить:
from pip import main
і, мабуть, mainбув знятий з pipякогось моменту, який саме зламав речі.
Здійснюється переривчастий піп-код : 95bcf8c5f6394298035a7332c441868f3b0169f4 "Перемістити всі внутрішні API на pip._internal", який перейшов у pip 18.0.
Тестували в Ubuntu 16.04 після оновлення з pip39.0.1 до 18.0.
pyenv
Зрештою, для серйозної розробки Python я б просто рекомендував вам встановити свій власний локальний Python з pyenv + virtualenv, який би також обійшов цю помилку Ubuntu: Як встановити іншу версію Python за допомогою apt-get?