Використовуйте 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 після оновлення з pip3
9.0.1 до 18.0.
pyenv
Зрештою, для серйозної розробки Python я б просто рекомендував вам встановити свій власний локальний Python з pyenv + virtualenv, який би також обійшов цю помилку Ubuntu: Як встановити іншу версію Python за допомогою apt-get?