Файл "/usr/bin/pip", строка 9, в <module> from pip import main ImportError: невозможно импортировать имя main

Я пытаюсь запустить веб-страницу, используя флешку python, и подключить ее к базе данных MySQL, и при установке пакетов MySQL я получаю эту ошибку.

enter image description here

Я делаю это на ec2 Linux AWS.

Ответы

Ответ 1

TL; DR

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

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

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

Примечание. Вам всегда нужно добавить флаг --user в не содержащий -d комплект поставки 10 с поддержкой ebian, если вы не находитесь в виртуальном пространстве! 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


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

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

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

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

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

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

  • Или удалите один из двух пипов - либо установленный пользователем, либо установленный системой - для разрешения конфликта:
    $ python -m pip uninstall pip - удалить ваш установленный вручную пип в пользу ранее установленной версии Ubuntu от пакета debian debug пакета python- (python3- для Python 3); он немного старше, но он находит и устанавливает последние модули из PyPI просто отлично, и по умолчанию имеет команду рабочего пика в $ PATH; или же
    $ sudo apt-get remove python-pip - удалить $ sudo apt-get remove python-pip Ubuntu пипс в пользу вашего последнего пипса 10; если он недоступен с помощью команды short 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> # или apt-cache search в более $ apt search <python-package> Ubuntu
    $ apt show <python-package> #, например python- колба
    $ sudo apt install <python-package> # или sudo apt-get install
    Пакеты с префиксом python- предназначены для Python 2; с python3- для Python 3.
    Стандартный способ установки apt-get может быть тем, что вам нужно. Например, в вашем случае:
    python-mysqldb - интерфейс Python для MySQL <- вилка MySQLdb == MySQL-python
    python-flask-sqlalchemy - поддержка SQL Alchemy
    python-pymysql - чистый драйвер Python MySQL
    Фактически, пакеты 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) на Ubuntu/Debian, поскольку это мешает работе диспетчера системных пакетов (apt) и может повлиять на компоненты ОС Ubuntu, когда системный модуль python неожиданно обновлен, особенно за счет зависимостей от другого пакета pip. Рекомендуется никогда не использовать Pip для изменения общесистемных пакетов Python, поскольку они управляются apt-get на Ubuntu.

Ответ 2

Эти шаги сработали для меня.

1- Удалите обновление pip из python.
2- Удалите пакет pip из вашего Ubuntu.
3- Убедитесь, что двоичный код pip больше не работает в вашей системе.

python -m pip uninstall pip
apt remove python-pip
whereis pip

4- Загрузите и установите pip. (кредиты для VanDragt.com)

wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
sudo python3 /tmp/get-pip.py
pip install --user pipenv
pip3 install --user pipenv
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.profile
source ~/.profile
whereis pip

Теперь вы сможете установить любой пакет пакетов, который вы хотите.

Ответ 3

Мой цент, у меня был такой же ImportError: cannot import name main.

Моя система - дистрибутив Linux Ubuntu, я выполнил эту команду:

python -m pip uninstall pip

Это удалило одну локальную (для пользователя) версию pip.

У меня уже был более старый исполняемый файл системы pip/pip2 (apt-get установленный в древние времена), который работал как шарм.

Ответ 4

Как было предложено в решении pip github

Временное исправление -

Отредактируйте файл /usr/bin/pip и прокомментируйте строку import main и отредактируйте ее.

#from pip import main
from pip._internal import main as main

Отлично работал для меня. Примечание. Это временное исправление. Подождите, пока команда будет исправлена.

ИЛИ ЖЕ

from pip import main
if __name__ == '__main__':
    sys.exit(main())

к этому:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

Как было предложено в этом ответе SO.

Ответ 5

Попробуй это

Проверьте версию python, которую вы используете

# Python --version

и попробуйте установить, например, если ваша версия равна 2,7

#python2.7 <package name> 

Будет хорошо работать......

Ответ 6

sudo easy_install MySQL-python может помочь или попробовать;

sudo yum install mysql-devel python-devel MySQL-python

Ознакомьтесь с этим пособием для получения справки,