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

1

Я получил сообщение на своем терминале при установке программного обеспечения: 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: $ 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
  • 0
    Вы проверяли этот stackoverflow.com/questions/43675074/… ??
  • 0
    Да уж. Моя версия Python 2.7.12. Это для Python 3.6. Я начинающий. Так я должен использовать первое решение для Python 3.6?
Показать ещё 6 комментариев
Теги:
pip
ubuntu-16.04
python-2.7

3 ответа

3

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

Найти путь pip:

$ which pip

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

$ sudo nano `which pip`

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

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

в

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

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

  • 0
    Если я правильно помню, я думаю, что мне пришлось переустановить пипс также
  • 1
    К сожалению, это может создать проблемы с будущими версиями pip (они будут импортированы из pip._internal а затем снова изменены) или перезаписано при обновлении Ubuntu. Вся эта проблема заключается в том, что основной pip фактически никогда не поддерживал импорт из self, создавая конфликт с версией Debian при обновлении. Самый надежный подход - это удалить любой из 2 установленных пипсов (основной или дебиан); в противном случае простого повторного открытия нового сеанса Bash (терминала) может быть достаточно для устранения ошибки.
1

TL; DR

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

  • Если вы все еще хотите использовать новый pip 10 исключительно, есть 3 быстрых метода:

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

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

Детали:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100


Ubuntu 16.04 с Python 2.7.12

Введение:
По иронии судьбы, несмотря на то, что сам предлагал сам pip сделать такое обновление с помощью команды pip install --upgrade pip явно в терминале (ugh!), Обновление не рекомендуется в расфасованных дистрибутивах GNU/Linux. Ubuntu обычно ожидает, используя диспетчер пакетов APT для любых общесистемных обновлений/установок модуля Python (включая сам протокол), например:
$ sudo apt-get update (resync 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 (устанавливает/обновляет протокол до последней версии, доступной в репозитории Ubuntu - обычно немного отстает от pypi.org, но это не имеет значения)
Если вам когда-либо понадобилось использовать команду pip install на Ubuntu/Debian вместо apt-get install, убедитесь, что она запущена изолированной и не меняет стандартные по умолчанию пакеты Python по умолчанию (никогда не используйте sudo with pip) - подробнее об этом ниже.

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

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

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

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

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

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

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

  • Наконец, вы можете вообще игнорировать оба пипса в пользу APT и устанавливать пакеты Python из всей системы Ubuntu с помощью: $ apt search <python-package> #, например. python- pandas
    $ 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), поскольку она вмешивается в работу системного пакета manager (apt) и может повлиять на Ubuntu OS компоненты, когда системный модуль python неожиданно обновлен, особенно зависимостями от другого пакета pip. Рекомендуется не использовать Pip для изменения общесистемных пакетов Python, поскольку они управляются с помощью apt-get на Ubuntu.

0

попытайтесь обновить системный протокол

sudo pip install --upprade pip

pip install --upprade pip

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

  • 0
    Я не получил эту ошибку, используя pip2. Позже я установил Python 3.6.4. Теперь я не получаю ошибку больше.
  • 0
    Это не работает. Пип не исполнится. поэтому pip install -upgrade не запустится. (Использование MS Ubuntu, на котором установлен Py 2.7). Может быть, я должен просто удалить его и переключиться на 3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню