Ошибка после обновления пипа: невозможно импортировать имя '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())

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

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

34 ответа

Решение

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

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

Вы можете прочитать больше об этом на трекере проблем pip

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

Чтобы восстановить pip3 бинарный вам нужно sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall,

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

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

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

$ which pip

путь -> /usr/bin/pip

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

Войти: $ 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 записать изменения и выйти

Надеюсь, что это будет делать!

Для семейства Ubuntu, Debian, Linux Mint

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

$ python3 -m pip uninstall pip

Ubuntu / Debian pip v8.1.1 (16.04) из python3-pip пакет Debian (см.$ 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 пункт, немного старше, но это не имеет значения)

Быстрое напоминание о синтаксисе (см. man apt для деталей):
$ sudo apt update (для повторной синхронизации файлов индекса пакета Ubuntu из современных источников)
$ apt search <python-package-name> (полный текстовый поиск по всем доступным пакетам)
$ apt show <python-package-name> (отображает подробное описание пакета)
$ sudo apt install <python-package-name>

Имена пакетов с префиксом python- для Python 2; и с префиксом python3- предназначены для Python 3 (например, python3-панды). Их тысячи, и они проходят тестирование интеграции в Debian и Ubuntu. Если вы не пытаетесь установить на уровне пользователя (pip install --user вариант) или в рамках virtualenv/venv, apt может быть тем, что вам нужно. Эти системные пакеты также доступны из виртуальных envs, поскольку virtualenv будет изящно прибегать к использованию системных библиотек при импорте, если ваши envs не предоставили копии модулей. Ваш заказ установлен (с 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, по умолчанию в pip, предоставляемой Ubuntu с 2016 года, но не для всей системы (никогда sudo pip3!), потому что pip мешает работе диспетчера пакетов APT и может повлиять на компоненты ОС Ubuntu, когда системный модуль python неожиданно изменяется. Удачи!


P. S. Все вышеизложенное относится к "идеальному" решению (путь 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
https://github.com/pypa/pip/issues/5240

решено только в один шаг.

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

Для 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,

использование python -m pip install вместо pip install

pip (Соотв. pip3) исполняемый файл предоставляется вашим дистрибутивом (python-pip пакет на Ubuntu 16.04) и находится по адресу /usr/bin/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 16.04 после обновления из pip3 С 9.0.1 до 18.0.

Вы можете решить эту проблему, переустановив 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

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

$ hash -r

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

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

Вы используете версию 8.1.1 pip, однако доступна 18.0. Вы должны рассмотреть возможность обновления с помощью команды 'pip install --upgrade pip'.

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

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

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

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

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

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

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

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

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

sudo python3 -m pip install --upgrade pip

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

Я нашел это здесь... Python.org: убедитесь, что пип актуален

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

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

В 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)

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

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

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

Что сработало для меня, чтобы исправить ошибку с помощью 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)

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

Я тоже сталкивался с этой проблемой, когда хотел обновить систему pip pip3 с 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. в ответ

Для чего это стоит, у меня была проблема с 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)

Каким-то образом (я не помню, как) у меня были установлены вещи Python в моем ~/.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)

Трюк и работает тоже

sudo -H pip install lxml

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

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

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

from pip import main

в

from pip._internal import main

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

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

Вы можете просто исправить пути pip и pip3, используя update-alternatives

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

здесь есть изменение, которое ищет ваша система /bin/pip а также /bin/pip3поэтому я скажу исправить ПУТЬ, добавив в ваш ~/.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

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

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

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

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

hash -r pip

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

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

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

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

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

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

импортировать main из pip._internal

from pip._internal import main

Отредактируйте код от

sudo nano /usr/bin/pip3

В 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', ваш пункт будет поврежден и отобразит ошибку "не удается найти основную".

python3.6 -m pip install scipy 

установить с помощью вышеуказанной команды в конкретный каталог,:)

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