Ответ 1
TL; DR
-
"Идеальное" решение (путь 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 года). -
Если вы все еще хотите использовать новый 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.
- просто заново откройте новый сеанс bash (новая вкладка терминала или тип
Примечание. Вам всегда нужно добавить флаг --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; если он недоступен с помощью команды shortpip
, просто добавьте свой каталог$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-pythonpython-flask-sqlalchemy
- поддержка SQL Alchemypython-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.