Ошибка после обновления 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())

Раньше он работал нормально, я не уверен, почему он выдает эту ошибку. Я искал информацию об этой ошибке, но не могу найти ничего, чтобы ее исправить.

Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация, я обновлю свой вопрос.

Дополнительное обсуждение на эта ссылка.

Diagon 25.08.2018 15:39

У меня была такая же проблема, потому что я использовал pip install --upgrade pip для обновления pip на сервере, где у меня не было прав администратора. Удаление pip с помощью python -m pip uninstall pip решило мою проблему.

Foad 30.08.2018 00:50

Ответы мне не помогли. Это была моя проблема: github.com/pypa/pipenv/issues/2095

Étienne 29.07.2019 13:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
487
3
387 378
32
Перейти к ответу Данный вопрос помечен как решенный

Ответы 32

Ответ принят как подходящий

Вы, должно быть, случайно обновили свой системный пип (возможно, через что-то вроде sudo pip install pip --upgrade)

pip 10.x регулирует расположение его внутренних компонентов. Команда pip3, которую вы видите, предоставляется сопровождающим вашего пакета (предположительно, на основе debian?), А не файлом, управляемым pip.

Подробнее об этом можно прочитать на трекер проблем pip

Вы, вероятно, захотите обновить нет свой системный пип и вместо этого использовать virtualenv.

Чтобы восстановить двоичный файл pip3, вам понадобится sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Если вы хотите продолжить работу на «неподдерживаемой территории» (обновление системного пакета за пределами системного менеджера пакетов), вам, вероятно, удастся обойтись с python3 -m pip ... вместо pip3.

sudo apt install python3-pip --reinstall не устранил проблему, однако я могу установить пакет с помощью python3 -m pip. Спасибо за вашу помощь. Я помечаю его как принятый.
g_p 15.04.2018 00:35

@g_p обновил направления "исправления" - просто проверил их в докере (я должен был сделать это в первый раз!)

Anthony Sottile 15.04.2018 01:10

Мне нужно использовать команду 'python -m pip uninstall pip', поскольку 'sudo pip uninstall pip' дал ошибку, аналогичную исходному вопросу

Mz A 26.04.2018 08:23

Спасибо, часть о восстановлении дистрибутива была чрезвычайно полезной.

rsethc 21.05.2018 07:31

Сработало для меня, также с помощью этой команды вы можете исправить версию python (2.7) той же проблемы.

Madox 07.08.2018 09:44

Удаление pip из ~ / .local устранило это для меня в Ubuntu 18.04.

jfleach 16.08.2018 16:52
sudo apt install python3-pip --reinstall Хорошо работал у меня. Спасибо.
kocica 03.10.2018 10:43

Спасибо! Это помогло! Используйте sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall для python2!

Barmaley 29.11.2018 20:13

Небольшая модификация комментария @Barmaley, я использовал sudo python2 -m pip uninstall pip && sudo apt install python-pip --reinstall для python2

Nathan 22.12.2018 18:49

Работает для Ubuntu в Windows. Решение - это то, что предлагает @Barmaley для python2 (интерпретатора Python по умолчанию).

jdhao 19.02.2019 08:55

Если вы используете apt, сначала запустите: sudo apt-get update, затем sudo apt-get install python-pip и никаких ошибок!

Paul Kenjora 16.04.2019 03:08

Вот что происходит, когда мы копируем и вставляем фрагменты командной строки, не зная, что они делают. Спасибо.

Jeffrey Blattman 18.10.2019 01:53

Проверьте, был ли pip кэширован по другому пути, для этого вызовите $ какой пункт и убедитесь, что путь отличается от пути, предложенного в ошибке, если это так, запустите:

$ hash -r

Когда кеш будет очищен, pip снова будет работать. ссылка: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Я использую 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 <module>
    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 <command> [options]

Это потому, что pip предназначен для Python 2. OP использует pip3, версию pip для Python 3, которую вы только что удалили. Эти двое различны и не взаимозаменяемы.

Neinstein 04.05.2018 16:37

Для пользователей семейства Ubuntu, Debian, Linux Mint

Благодаря объяснению Энтони выше вы можете сохранить исходный системный пип (в / usr / bin / и dist-packages /) и удалить установленный вручную пип (в ~ / .local /), чтобы разрешить конфликт:

$ python3 -m pip uninstall pip

Ubuntu / Debian pip v8.1.1 (16.04) из пакета debian python3-pip (см .$ pip3 -V) показывает те же результаты поиска, что и последний pip v10.0.1, и отлично устанавливает последние модули из PyPI. В нем есть рабочая команда pip (уже в $ PATH), а также хорошая опция --user, исправленная по умолчанию с 2016 года. Если посмотреть на примечания к выпуску pip, новые версии в основном касаются исправлений ошибок для конкретных вариантов использования и некоторых новых функций, поэтому нет всем нужно спешить с обновлением pip. И новый pip 10 в любом случае можно развернуть на Python virtualenvs.

Но независимо от пипсов, ваша ОС позволяет быстро устанавливать общие модули Python (включая numpy) с APT без необходимости в пипсах, например:
$ sudo apt install python3-numpy python3-scipy (с системными зависимостями)
$ sudo apt install python3-pip (исправленный Debian пакет, немного старше, но это не имеет значения)

Quick apt syntax reminder (please see man apt for details):
$ sudo apt update (to resync Ubuntu package index files from up-to-date sources)
$ apt search <python-package-name> (full text-search on all available packages)
$ apt show <python-package-name> (displays the detailed package description)
$ sudo apt install <python-package-name>

Имена пакетов с префиксом python- предназначены для Python 2; и с префиксом python3- предназначены для Python 3 (например, python3-pandas). Их тысячи, и они проходят интеграционное тестирование в Debian и Ubuntu. Если вы не стремитесь установить на уровне пользователя (опция pip install --user) или внутри virtualenv / venv, apt может быть тем, что вам нужно. Эти системные пакеты также доступны из виртуальных окружений, так как virtualenv корректно вернется к использованию системных библиотек при импорте, если ваши окружения не предоставили копии модулей. Ваши индивидуально установленные (с помощью pip --user) модули для каждого пользователя в ~/.local/lib также переопределят их.

Обратите внимание, поскольку это установка общесистемный, вам редко придется удалять их (необходимо помнить о зависимостях ОС). Это удобно для пакетов со многими системными зависимостями (например, с scipy или matplotlib), поскольку APT будет отслеживать и предоставлять все необходимые системные библиотеки и расширения C, тогда как с pip у вас есть нет таких гарантий.

Фактически, для общесистемных пакетов Python (в отличие от отдельных пользователей, уровня домашнего каталога или ниже) Ubuntu надеется использует диспетчер пакетов APT (а не sudo pip), чтобы избежать поломки ОС: sudo pip3 нацелен на тот же каталог /usr/lib/python3/dist-packages, где APT хранит модули, чувствительные к ОС. Последние выпуски Debian / Ubuntu сильно зависят от Python 3, поэтому его предустановленные модули управляются apt и не должны изменяться.

Поэтому, если вы используете команду pip3 install, убедитесь, что она работает в изолированной виртуальной среде разработки, такой как virtualenv (sudo apt install python3-virtualenv), или со встроенным Python3 (-m venv), или на уровне пользователя (опция --user pip, по умолчанию в пипе, предоставляемом Ubuntu с 2016 года), но нет в масштабе всей системы (никогда не sudo pip3!), потому что пип мешает с операцией диспетчера пакетов APT и может повлиять на ОС Ubuntu составные части при неожиданном изменении системного модуля Python. Удачи!


П.С. Все вышесказанное относится к «идеальному» решению (способ Debian / Ubuntu).

Если вы по-прежнему хотите использовать только новый pip3 v10, есть 3 быстрых обходных пути:

  • просто откройте новый сеанс bash (новую вкладку терминала или введите bash) - и pip3 v10 станет доступным (см. pip3 -V). debian pip3 v8 остается установленным, но не работает; или же
  • команда $ hash -d pip3 && pip3 -V для обновления пути pip3 в $ PATH. debian pip3 v8 остается установленным, но не работает; или же
  • команда $ sudo apt remove python3-pip && hash -d pip3 для полного удаления debian pip3 v8 в пользу вашего нового pip3 v10.

Примечание: Вам всегда нужно будет добавлять флаг --user к любому пипу, не предоставленному debian, если вы не находитесь в virtualenv! (он развертывает пакеты python на ~/.local/, по умолчанию в предоставляемых debian / ubuntu python3-pip и python-pip с 2016 года). Использование вами pip 10 в масштабе всей системы, за пределами virtualenv, на самом деле не поддерживается Ubuntu / Debian. Никогда не sudo pip3!

Дополнительная информация:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

Можете ли вы помочь мне понять, почему установка обновленной версии pipлокально с --user, то есть без sudo, влияет на мою способность запускать установленный apt pip? Я думал, что эти двое будут сосуществовать. Но, как показывает это суть, установленный apt ломается после того, как я сделаю python3 -m pip install --user --upgrade pip. Я не ищу решения - мне просто искренне любопытно понять, что здесь происходит.

George Hawkins 10.08.2019 16:13

@George Это происходит из-за несоответствия между библиотеками пакетов и их оболочками, которые их импортируют. Попытка немедленно запустить системную команду pip (без применения каких-либо решения) все равно вызовет установленную apt системную версию сценария оболочки pip /usr/bin/pip3, а не ту, которая установлена ​​как --user (~/.local/bin/pip*), в соответствии с системой ОС $ PATH, которая все еще установлена для запуска системной версии оболочки, но не ее библиотек ..

Alex C. 11.08.2019 23:35

@George Это потому, что теперь на ~/.local/lib/python3.?/site-packages/pip установлен новый пакет pip, который имеет приоритет над системным подходящим в относительном импорте Python (локальный пользовательский сайт имеет приоритет над глобальными библиотеками). И поскольку более старая оболочка пытается использовать from pip import main, а не from pip._internal или его класс __main__ в более новой версии пакета pip, команда pip из сути не работает с ImportError: cannot import name 'main'. Таким образом, оба пункта могут сосуществовать (на диске), но функциональность исходного системного пункта будет "нарушена".

Alex C. 11.08.2019 23:43

+1 для --user. pip install --user сделал это для меня. (У меня есть python 2.7, python 3.6 и python 3.7, все они установлены в Ubuntu 18.04 LTS.)

Stephen G Tuggy 15.08.2019 01:40

Я столкнулся с той же проблемой в своей системе Ubuntu 16.04. Мне удалось исправить это, переустановив pip с помощью следующей команды:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

Его преимущество заключается в том, что вы устанавливаете его из источника, и ни одно из вышеперечисленных не работает на чистом пустом Debian 9 (от моего провайдера выделенного сервера)

Peter Rosemann 22.05.2018 21:39

свернуть Интернет до суперпользователя, что может пойти не так!

Sum1sAdmin 23.05.2018 18:47

То же самое произошло со мной на Pixelbook, использующем новый LXC (strech). Это решение очень похоже на принятое, с одной тонкой разницей, для меня это фиксированный pip3.

sudo python3 -m pip install --upgrade pip

Это подтолкнуло версию, и теперь она работает, как ожидалось.

Я нашел здесь ... Python.org: Убедитесь, что pip обновлен

Рекавери с python3 -m pip install --user pip==9.0.1 (или той версии, которая работала)

Что помогло мне исправить ошибку с использованием pip3, было:

sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

Все работает:

 demon@UbuntuHP:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 demon@UbuntuHP:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 demon@UbuntuHP:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

Может быть, новая версия 10.0.1 pip не обновляет двоичный файл в / usr / bin? (что, кажется, не так)

Обновлено: такая же проблема возникает в Ubuntu 18.04. Лучшее решение, которое я нашел, - это символическая ссылка на двоичные файлы pip с /home/<user/.local/bin на /usr/local/bin или /usr/bin (в зависимости от ваших предпочтений) следующим образом:

ln -sv /home/<user>/.local/bin/pip /usr/local/bin/pip
ln -sv /home/<user>/.local/bin/pip2 /usr/local/bin/pip2
ln -sv /home/<user>/.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home/<user>/.local/bin/pip3 /usr/local/bin/pip3
ln -sv /home/<user>/.local/bin/pip3.6 /usr/local/bin/pip3.6

ПРИМЕЧАНИЕ: замените <user> вашим текущим пользователем

Связанные версии (последние) находятся в:

Версия 3.6:

/home/demon/.local/lib/python3.6/site-packages/pip (Python 3.6)

Версия 2.7:

/home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

Это решило мою проблему. Остальные ответы - нет.

Amin Husni 09.06.2018 14:53

Однако вам действительно не следует возиться напрямую с файлами в /usr/bin. И ваш PATH неправильный, если /usr/local/bin не предшествует /usr/bin.

tripleee 15.09.2019 09:44

Двоичный файл pip не существует в /usr/local/bin. Это только в /home/<user>/.local/bin и / или /home/<user>/.local/lib/python<version>/site-packages/pip в новых версиях (v10.0 + не обновляйте бинарник в /usr/bin). Следовательно, копия или символическая ссылка двоичного файла должна быть создана либо в /usr/bin, либо в /usr/local/bin (в зависимости от предпочтений пользователя), чтобы pip можно было запускать глобально из командной строки.

cryptoboy 15.09.2019 14:56

Бинарные файлы каталога pip существуют и должны быть связаны / скопированы из: demon @ Bionic18: ~ / .local / bin $ ls pip pip2 pip2.7 pip3 pip3.6 По умолчанию для двоичного файла pip используется последняя версия, установленная в системе.

cryptoboy 15.09.2019 14:59

Приведенные выше команды не работали для меня, но они были очень полезны:

sudo apt purge python3-pip
sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*  
sudo pip3 install jupyter

Спасибо, это был единственный, который действительно сработал у меня после случайного обновления pip на Ubuntu 16.04 LTS.

etiennedi 31.01.2021 12:55

импортировать основную часть из pip._internal

from pip._internal import main

Отредактируйте пип-код из

sudo nano /usr/bin/pip3

Вы можете отредактировать ответ и уточнить его? Не очень понятно, как отредактировать файл /usr/bin/pip3 ...

M. Volf 25.07.2018 11:52

Мы можем устранить ошибку, изменив файл pip.

Проверьте расположение файла:

$ which pip

path -> /usr/bin/pip

Перейдите в это место (/ usr / bin / пункт) и откройте терминал

Введите: $ sudo nano pip

Ты можешь видеть:

import sys
from pip import main
if __name__ == '__main__':
     sys.exit(main())

Измените на:

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

затем ctrl + o записываем изменения и выходим

Надеюсь, это подойдет !!

Внесение этих изменений не устранило проблему, но вернул исходный текст. ¯_ (ツ) _ / ¯

David 06.10.2018 17:06

Я пробовал это, но получил AttributeError: module 'pip.__main__' has no attribute 'main'

dnnagy 03.06.2019 14:17

Убедитесь, что вы написали _main () not main ()

vijay athithya 04.06.2019 07:46

в последней версии pip3, main() перемещен в pip._internal. Оператор импорта следует изменить на from pip._internal import main.

Yossarian42 20.09.2019 03:08

Этот ответ сработал для меня в pip 19.3.1 (python3.6.9, по умолчанию в WSL-Ubuntu) в Ubuntu 18.04 в Windows. @ Yossarian42, с какой версией pip3 вы это использовали?

icedwater 03.01.2020 12:43

Версия @icedwater pip3: 19.2.3

Yossarian42 03.01.2020 23:45

почему не только sudo nano `which pip`?

TamaMcGlinn 11.04.2020 07:46

разрешается только за один шаг.

Я тоже столкнулся с этой проблемой, но это можно решить просто с помощью одной команды, не беспокоясь и не теряя времени, и я пробовал ее на нескольких системах, это самое чистое решение этой проблемы. И это:

Для python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Таким образом, вы можете просто устанавливать пакеты с помощью pip3. для проверки используйте pip3 --version.

Для более старых версий используйте: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall.

Таким образом, теперь вы можете просто устанавливать пакеты с помощью pip. для проверки используйте pip --version.

У меня такая же проблема и я ее решил. Вот мое решение. Во-первых, когда я запускаю pip install something, ошибка возникает примерно так:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

Итак, я захожу в файл / usr / bin / и кошку 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())

И тут я думаю, что его не было в пути установки. Итак, я подключился к python3-pip, вот так:

cd /.local/lib/python3.5/site-packages/pip

P.S .: вы должны направить cd в правильном направлении на вашем компьютере Затем я cat файл, чтобы увидеть различия (вы можете использовать другие операции, чтобы увидеть код):

cat __main__.py

И я увидел это:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

if __name__ == '__main__':
    sys.exit(_main())

Итак, вы видите разницу? Я могу понять, что мне нужно сделать файл таким же, как файл в / usr / bin / pip3

Итак, я скопировал код в /.local/lib/python3.5/site-packages/pip, чтобы заменить код в / usr / bin / pip3 и проблема исчезнет!

P.S .: pip3 или pip не имеют разницы в этой проблеме. Буду рад, если мое решение решит вашу проблему!

Как сказал @cryptoboy - проверьте, какую версию pip / python вы установили

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

а затем проверьте наличие ненужных библиотек в папке .local / lib /.

Я сделал резервную копию настроек, когда переходил на новую версию Kubuntu, и в моем домашнем каталоге была папка .local / lib / python2.7 /. Установлен python 3.6. Я просто удалил старую папку и теперь все отлично работает!

Используйте python -m pip install вместо pip install

Пример:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

Исполняемый файл pip (соответственно pip3) предоставляется вашим дистрибутивом (пакет python-pip в Ubuntu 16.04) и находится по адресу /usr/bin/pip.

Следовательно, он не обновляется вместе с самим пакетом pip при обновлении pip и может сломаться.

Если вы просто используете python -m pip напрямую, например как в:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

он проходит по вашему пути Python, находит последнюю версию pip и запускает этот файл.

Он основан на том факте, что файл исполняется через import, но это очень стандартный тип интерфейса, и поэтому вероятность его поломки меньше, чем у более хакерского сценария 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", который вошел в пип 18.0.

Протестировано в Ubuntu 16.04 после обновления pip3 9.0.1 до 18.0.

Pyenv

В конечном итоге, однако, для серьезной разработки Python я бы просто рекомендовал вам установить собственный локальный Python с pyenv + virtualenv, что также позволит обойти эту ошибку Ubuntu: https://askubuntu.com/questions/682869/how-do-i-install-a-different-python-version-using-apt-get/1195153#1195153

после 5 часов поиска это сработало для меня. Я могу доставить вам цветок, если вы пришлете мне свой адрес. Спасибо.

cagri 10.10.2018 13:00

Я использую систему, в которой есть sudo apt, но нет sudo pip. (И нет доступа su.) Я попал в такую ​​же ситуацию, следуя совету pip:

You are using pip version 8.1.1, however 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

Ни одно из других исправлений у меня не помогло, потому что у меня недостаточно прав администратора. Однако, прочитав это, я кое-что запомнил:

  • Я не должен был этого делать. Конечно, Пип сказал мне. Он солгал.
  • Использование --user решает множество проблем, сосредотачиваясь на пользовательском каталоге.

Итак, я обнаружил, что эта командная строка работает, чтобы вернуть меня туда, где я был. Если вы использовали версию, отличную от 8.1.1, вы, очевидно, захотите изменить эту часть строки.

python -m pip install --force-reinstall pip==8.1.1 --user

Это единственное, что у меня сработало, но сработало отлично!

Для Python версии 2.7 решение @Anthony работает идеально, изменив python3 на питон следующим образом:

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall

Вы можете решить эту проблему, переустановив pip.

Используйте одну из следующих команд командной строки для переустановки pip:

Python2:

python -m pip uninstall pip && sudo apt install python-pip --reinstall

Python3:

 python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

Уловка и работает тоже

sudo -H pip install lxml

У меня была такая же ошибка, но python -m pip все еще работал, поэтому я исправил ее ядерной опцией sudo python -m pip install --upgrade pip. Это сделало это для меня.

В ubuntu 18.04.1 Bionic Beaver вам необходимо выйти и снова войти в систему (перезапуск не требуется), чтобы получить правильную среду.

$ sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

$ pip --version
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

$ exit
<login>

$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)

В Debian вам нужно сначала обновить apt ....

sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet

Если вы пропустите sudo apt-get update -qq, ваш пип станет поврежденным и отобразит ошибку «не удается найти основную».

Эта ошибка может быть разрешительной. Итак, протестируем выполнение команды с флагом -ЧАС:

sudo -H pip3 install numpy

вопрос очень четко говорит, что ImportError не ошибка разрешений

Anthony Sottile 09.06.2019 16:47

Как бы то ни было, у меня была проблема с pip (не pip2 или pip3):

$ pip -V
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

Каким-то образом (не могу вспомнить, как) у меня в каталоге ~/.local был установлен питон. После того, как я удалил оттуда каталог pip, pip снова начал работать.

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

Используйте следующую команду перед выполнением любой команды pip

hash -d pip

Это будет работать

Не могли бы вы уточнить, как это поможет / + удалить снисходительные комментарии?

elf 19.07.2019 17:11

Что-то не так с пакетами, когда он генерирует файл / usr / bin / pip, вам нужно изменить импорт:

from pip import main

к

from pip._internal import main

Это решает проблему, я не уверен, почему она сгенерирована, но в следующей проблеме говорится кое-что:

После обновления pip 10 на pyenv «ImportError: невозможно импортировать имя 'main'»

Вы можете попробовать это:

sudo ln -sf $( type -P pip ) /usr/bin/pip

Хотя этот код может ответить на вопрос, было бы лучше включить некоторый контекст, объясняющий, как он работает и когда его использовать. Ответы, содержащие только код, в конечном итоге бесполезны.

Giulio Caccin 01.09.2019 11:04

Я также столкнулся с этой проблемой, когда хотел обновить систему pippip3 с 9.0.1 до 19.2.3.

После запуска pip3 install --upgrade pip версия pip становится 19.2.3. Но main() был перемещен в pip._internal в последней версии, что приводит к поломке pip3.

Итак, в файле /usr/bin/pip3 замените line 9: from pip import main на from pip._internal import main. Проблема будет исправлена, работает так же для python2-pip. (Проверено на дистрибутиве Ubuntu 18.04)

Согласно отвечать @Vincent H.

Выполните следующие команды, чтобы исправить. После запуска python3 -m pip install --upgrade pip выполните следующую команду.

hash -r pip

Источник: https://github.com/pypa/pip/issues/5221

вы можете просто исправить пути pip и pip3 с помощью update-alternatives

первое, что вы должны проверить, это ваш текущий $PATH запустите echo $PATH и посмотрите, можете ли вы найти /usr/local/bin, где обычно находятся pip3 и pip

здесь есть изменение, которое ваша система ищет здесь /bin/pip и /bin/pip3 поэтому я скажу исправить PATH, добавив в ваш файл ~/.bash_profile, чтобы он сохранялся

export PATH=$PATH:/usr/local/bin а затем проверьте, исправлено ли оно с помощью which pip и which pip3

если нет, то используйте update-alternatives, чтобы исправить это окончательно

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

и если вы хотите указать pip на pip3, тогда

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30

Это сработало для меня!

hash -r pip # or hash -d pip

Теперь удалите установленную версию pip и переустановите ее, используя следующие команды.

python -m pip uninstall pip  # sudo
sudo apt install --reinstall python-pip

Если точка сломана, используйте:

python -m pip install --force-reinstall pip

Надеюсь, поможет!

Я использовал следующий код для загрузки модуля, который может нуждаться в установке, чтобы избежать этой ошибки (которую я тоже получил) - без проблем используя последнюю версию Python и последнюю версию pip.

try
  from colorama import Fore, Back, Style
except:
  !pip install colorama
  from colorama import Fore, Back, Style

Другие вопросы по теме