"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
"Идеальное" решение (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 года).Если вы все еще хотите использовать исключительно новый пункт 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.
- просто заново откройте новый сеанс bash (новую вкладку терминала или введите
Примечание: вам всегда нужно будет добавить --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
это может быть полезно