"ImportError: невозможно импортировать имя main" после обновления до версии 10.0.0 для Python версии 2.7.12 - установлена ​​только одна версия Python

При установке программного обеспечения в моем терминале появилось сообщение: You are using pip version 8.1.1, however version 10.0.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

Итак, я обновил версию пипа: $ pip install --upgrade pip

Теперь я получаю эту ошибку:

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

3 ответа

TL;DR

  1. "Идеальное" решение (Ubuntu/Debian):
    $ python -m pip uninstall pip чтобы удалить новый pip 10 и сохранить исправленный pip, предоставленный Ubuntu / Debian 8. Для общесистемной установки модулей используйте apt где только возможно (если вы не в virtualenv), подробнее об этом ниже. В старых версиях Ubuntu / Debian всегда добавляйте --user флаг при использовании pip за пределами virtualenvs (устанавливается в ~/.local/, по умолчанию в python-pip и python3-pip с 2016 года).

  2. Если вы все еще хотите использовать исключительно новый пункт 10, есть 3 быстрых решения:

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

Примечание: вам всегда нужно будет добавить --user Отметьте пункт 10, не предоставленный Debian, если только вы не в virtualenv! Использование pip 10 в масштабе всей системы, за исключением virtualenv, не поддерживается Ubuntu/Debian. Никогда sudo pip!

Подробности:
https://github.com/pypa/pip/issues/5221
https://github.com/pypa/pip/issues/5240


Ubuntu 16.04 с Python 2.7.12

Введение:
Как ни странно, несмотря на то, что сам pip предложил сделать такое обновление через pip install --upgrade pip Команда явно в терминале (тьфу!), его обновление не рекомендуется в предварительно упакованных дистрибутивах GNU/Linux. Ubuntu, как правило, ожидает использования менеджера пакетов APT для любых системных обновлений / установок модуля Python (включая сам pip), например:
$ sudo apt-get update (повторно синхронизировать индексные файлы пакетов Ubuntu из источников)
$ apt-cache search <python-package-name> (полный текстовый поиск по всем доступным пакетам)
$ apt-cache show <python-package-name> (отображает описание пакета)
$ sudo apt-get install python-numpy python-scipy python-matplotlib (легко устанавливает тяжелые модули для науки о данных, автоматически разрешая все системные зависимости)
$ sudo apt-get install ipython (устанавливает IPython-ноутбук, который вы искали)
$ sudo apt-get install python-pip (устанавливает / обновляет pip до последней версии, доступной в репозитории Ubuntu - обычно немного позади pypi.org, но это не имеет значения)
Если вам когда-либо придется использовать pip install команда в Ubuntu / Debian вместо apt-get install Пожалуйста, убедитесь, что он работает изолированно и не меняет стандартные системные пакеты Python (никогда не используйте sudo с pip) - подробнее об этом ниже.

ImportError: невозможно импортировать имя main
Ошибка вызвана pip install --upgrade pip команда: устанавливает последнюю версию pip 10 вместе со стандартной версией Ubuntu из python-pip пакет debian из дистрибутива ОС (установка системы Python), полностью минуя Ubuntu apt подсистема. Это нарушает стандартный pip в Ubuntu: запускаемый сценарием debian скрипт из python-pip (установленный в /usr/bin/pip*) пытается выполнить импорт main() из только что установленной библиотеки pip 10, но с другим импортом путь, поэтому он терпит неудачу.

Эта ошибка более подробно обсуждается в ветке для разработчиков системы отслеживания проблем, включая несколько предложенных решений, таких как:

  • $ hash -d pip команда: когда hash вызывается, полный путь к pip определяется путем поиска в каталогах в $ PATH и запоминается. Любое ранее запомненное имя пути отбрасывается. -d опция заставляет оболочку "забыть" запомненное местоположение данного имени пакета; или же

  • Точно так же вы можете просто заново открыть новый сеанс bash (новую вкладку терминала), чтобы обновить путь к пипсу в $PATH; или же

  • Вы могли бы просто использовать pip2 команда (или pip3 для Python 3) вместо pip вызвать старый установленный системой скрипт pip /usr/bin/pip2 тогда как любой скрипт запуска пипса, расположенный в $HOME/.local/bin dir (pip, pip2, pip2.7) запустит новую версию pip 10, установленную пользователем;

  • Вы также можете использовать версионные команды Python в сочетании с -m Переключитесь на запуск соответствующей копии pip, например:
    $ python2 -m pip install --user SomePackage # default Python 2
    $ python2.7 -m pip install --user SomePackage # в частности Python 2.7
    Это удобно, если у вас есть несколько версий Python и вам нужно расширение от PyPI для конкретной версии Python. --user Переключатель требуется только тогда, когда pip используется за пределами virtualenv.

  • Или удалите один из двух пипсов - либо установленных пользователем, либо установленных системой - для разрешения конфликта:
    $ python -m pip uninstall pip - удалить установленный вручную pip в пользу ранее установленной версии Ubuntu из пакета debian python-pip (python3-pip для Python 3); он немного старше, но он отлично находит и устанавливает последние модули из PyPI и по умолчанию имеет рабочую команду pip в $PATH; или же
    $ sudo apt-get remove python-pip - удалить предоставленный Ubuntu пункт в пользу вашего последнего пункта 10; если он не доступен через короткий pip команда, просто добавьте свой $HOME/.local/bin каталог вашей переменной среды $ PATH для использования pip команда (см. выше).
    Примечание: Ubuntu 16.04 pip v8.1.1 и последний pip v10.0.1 выдают точно такие же результаты поиска по индексу PyPI и могут использовать те же версии модулей;

  • Наконец, вы можете полностью игнорировать оба пипса в пользу APT и устанавливать пакеты Python для всей системы из репозитория Ubuntu с помощью:
    $ apt search <python-package> # например, питон-панды
    $ apt show <python-package> # например, питон-колба
    $ sudo apt install <python-package>
    Пакеты с префиксом python- для Python 2; с python3- для Python 3.
    Установка через apt-get может быть тем, что вам нужно, на самом деле пакеты python из репозитория Ubuntu предпочтительны, когда это возможно, особенно в случае сильных системных зависимостей или при использовании в масштабе всей системы. Конечно, количество пакетов Python в репозитории Ubuntu (несколько тысяч!) Относительно меньше по сравнению с PyPI (и имеют только одну их версию), потому что любой репозиторий ОС немного отстает от версий PyPI. Но плюсом APT является то, что все предоставляемые Ubuntu пакеты прошли интеграционное тестирование в Ubuntu, а apt-get быстро разрешает тяжелые зависимости, такие как расширения C, автоматически. Вы всегда получите все необходимые системные библиотеки как часть установки apt, но с pip у вас нет таких гарантий.
    Однако APT может не подойти, если вам действительно нужна последняя (или определенная более старая) версия пакета, или когда ее можно найти только в PyPI, или когда модули должны быть изолированы; тогда пипс действительно более подходящий инструмент. Если вы используете pip install команда на Ubuntu вместо apt-get install убедитесь, что он работает в изолированной виртуальной среде разработки, например, с помощью virtualenv (sudo apt-get install python-virtualenv) или встроенный venv модуль (доступен только в python3) или на уровне пользователя (pip install --user опция команды), но не для всей системы (никогда sudo pip!).

Примечание: использование sudo pip Следует избегать использования команды (с доступом с правами root), поскольку она мешает работе диспетчера системных пакетов (apt) и может повлиять на компоненты ОС Ubuntu, когда системный модуль python неожиданно обновляется, в частности, из-за зависимостей от другого пакета pip. Рекомендуется никогда не использовать Pip для изменения общесистемных пакетов Python, так как они управляются apt-get на Ubuntu.

Я реализовал ответ @catalinpopescu от ImportError: не могу импортировать имя main при запуске команды pip --version в 32-битной Windows7

Найти путь в пипсах:

$ which pip

Изменить файл (выберите ваш любимый редактор):

$ sudo nano `which pip`

Затем измените строки @catalinpopescu сказал: Комментировать / заменить строки:

from pip import main
sys.exit(main())

чтобы:

from pip import __main__
sys.exit(__main__._main())

Сразу же я обновляюсь до версии Pip 10.0.1, которая, похоже, не имеет этой ошибки.

Попробуйте обновить системный пункт

установить sudo pip - обновить pip

pip install --upgrade pip

это может быть полезно

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