Ошибка после обновления pip: невозможно импортировать имя 'main'

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

[email protected]:~$ 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'


[email protected]:~$ 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())

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

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

Ответ 1

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

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

Подробнее об этом можно узнать на контролере проблем с пиками

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

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

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

Ответ 2

Ошибка может быть исправлена путем изменения файла pip

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

$ which pip

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

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

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

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

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 запишите изменения и выйдите.

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

Ответ 3

Для семейства 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 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-pandas). Их тысячи, и они проходят тестирование интеграции в 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, по умолчанию в пипе, предоставленном Ubuntu с 2016 года), но не в масштабе всей системы (никогда sudo pip3!), потому что пип мешает работе Менеджер пакетов APT и может повлиять на компоненты Ubuntu OS, когда системный модуль 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/, по умолчанию в python3-pip и python-pip, предоставленных debian/ubuntu, с 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

Ответ 4

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

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

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

Ответ 5

Используйте 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 "[email protected]" )
pip3() ( python3 -m pip "[email protected]" )

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

Ответ 6

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

$ hash -r

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

Ответ 7

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

Ответ 8

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

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

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

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

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

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

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

Ответ 9

Восстановить с помощью python3 -m pip install --user pip==9.0.1 (или сработавшей версии)

Ответ 10

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

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

Ответ 11

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

sudo python3 -m pip install --upgrade pip

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

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

Ответ 12

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

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

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

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

 [email protected]:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 [email protected]:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 [email protected]:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

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

ОБНОВЛЕНИЕ: та же проблема возникает в Ubuntu 18.04. Лучшее решение, которое я нашел, - это символическая ссылка на двоичные файлы пипсов от /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)

Ответ 16

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

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

Ответ 17

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

sudo -H pip install lxml

Ответ 18

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

Ответ 19

python3.6 -m pip install scipy 

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

Ответ 20

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

Ответ 21

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

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

Ответ 22

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

Ответ 23

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

from pip._internal import main

Измените код

sudo nano /usr/bin/pip3

Ответ 24

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

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

Итак, я подключился к файлу/usr/bin/и cat 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

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

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, и проблема исчезнет!

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

Ответ 25

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

 [email protected]:~$ pip -V
 [email protected]:~$ pip2 -V
 [email protected]:~$ pip3 -V

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

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

Ответ 26

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

Ответ 27

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

sudo -H pip3 install numpy

Ответ 28

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

hash -d pip

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

Ответ 29

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

from pip import main

в

from pip._internal import main

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

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

Ответ 30

Проблема: При обновлении pip (до v10) хотя бы на Ubuntu 16.04 команда pip3 перестает работать ("не удается импортировать main"). Смотрите подробности вопроса.

Решение: Вы должны добавить в свой bashrc/скорректировать свой путь следующим образом:

export PATH="${HOME}/.local/bin:$PATH"

О pipenv: pipenv обновляет pip3 до версии более 10.0.0. Представленное здесь решение рекомендовано Даном Райаном (специалистом по обслуживанию Pipenv).