Ошибка после обновления пипа: невозможно импортировать имя 'main'
Всякий раз, когда я пытаюсь установить какой-либо пакет, используя pip, я получаю эту ошибку импорта:
guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
sys.exit(main())
Раньше все работало нормально, я не уверен, почему выдает эту ошибку. Я искал об этой ошибке, но не могу найти ничего, чтобы исправить это.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, я обновлю свой вопрос.
34 ответа
Должно быть, вы случайно обновили системный пип (возможно, через sudo pip install pip --upgrade
)
Пип 10.х определяет, где находятся его внутренние органы. pip3
Команда, которую вы видите, предоставлена вашим сопровождающим пакета (предположительно, основана на Debian?) и не является файлом, управляемым pip.
Вы можете прочитать больше об этом на трекере проблем pip
Возможно, вы захотите не обновлять системный пипс, а вместо этого использовать virtualenv.
Чтобы восстановить pip3
бинарный вам нужно sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
,
Если вы хотите продолжить работу на "неподдерживаемой территории" (обновление системного пакета вне диспетчера системных пакетов), вы, вероятно, можете обойтись без python3 -m pip ...
вместо pip3
,
Мы можем устранить ошибку, изменив файл pip.
Проверьте расположение файла:
$ which pip
путь -> /usr/bin/pip
Перейдите в это место (/ usr / bin / pip) и откройте терминал
Войти: $ sudo nano pip
Ты можешь видеть:
import sys
from pip import main
if __name__ == '__main__':
sys.exit(main())
Изменить на:
import sys
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
затем Ctrl + O записать изменения и выйти
Надеюсь, что это будет делать!
Для семейства Ubuntu, Debian, Linux Mint
Благодаря приведенному выше объяснению Энтони вы можете сохранить исходный системный пип (в /usr/bin/ и dist-packages/) и удалить установленный вручную пип (в ~/.local/) для разрешения конфликта:
$ python3 -m pip uninstall pip
Ubuntu / Debian pip v8.1.1 (16.04) из python3-pip
пакет Debian (см.$ pip3 -V
) показывает те же результаты поиска, что и последний pip v10.0.1, и прекрасно устанавливает последние модули из PyPI. У него есть рабочий pip
команда (уже в $PATH), плюс хорошая --user
опция включена по умолчанию с 2016 года. Глядя на примечания к выпуску pip, новые версии в основном касаются исправлений ошибок в конкретных случаях и некоторых новых функций, так что не все пока спешат обновлять pip. И новый pip 10 в любом случае может быть развернут на Python virtualenvs.
Но независимо от пипсов ваша ОС позволяет быстро устанавливать обычные модули Python (включая numpy) с APT без необходимости в пипсах, например:$ sudo apt install python3-numpy python3-scipy
(с системными зависимостями)$ sudo apt install python3-pip
(Исправленный Debian пункт, немного старше, но это не имеет значения)
Быстрое напоминание о синтаксисе (см.
man apt
для деталей):$ sudo apt update
(для повторной синхронизации файлов индекса пакета Ubuntu из современных источников)$ apt search <python-package-name>
(полный текстовый поиск по всем доступным пакетам)$ apt show <python-package-name>
(отображает подробное описание пакета)$ sudo apt install <python-package-name>
Имена пакетов с префиксом python-
для Python 2; и с префиксом python3-
предназначены для Python 3 (например, python3-панды). Их тысячи, и они проходят тестирование интеграции в Debian и Ubuntu. Если вы не пытаетесь установить на уровне пользователя (pip install --user
вариант) или в рамках virtualenv/venv, apt может быть тем, что вам нужно. Эти системные пакеты также доступны из виртуальных envs, поскольку virtualenv будет изящно прибегать к использованию системных библиотек при импорте, если ваши envs не предоставили копии модулей. Ваш заказ установлен (с pip --user
) пользовательские модули в ~/.local/lib
переопределит их тоже.
Обратите внимание, поскольку это общесистемная установка, вам редко придется их удалять (нужно помнить о зависимостях ОС). Это удобно для пакетов со многими системными зависимостями (например, с scipy или matplotlib), так как APT будет отслеживать и предоставлять все необходимые системные библиотеки и расширения C, тогда как с pip у вас нет таких гарантий.
Фактически, для общесистемных пакетов Python (в отличие от уровня пользователя, уровня домашнего каталога или ниже) Ubuntu ожидает использования диспетчера пакетов APT (а не sudo pip
) чтобы не сломать ОС: sudo pip3
нацеливается на то же самое /usr/lib/python3/dist-packages
каталог, в котором APT хранит чувствительные к ОС модули. Последние выпуски Debian/Ubuntu сильно зависят от Python 3, поэтому его предустановленные модули управляются apt
и не должен быть изменен.
Так что если вы используете pip3 install
Команда, пожалуйста, убедитесь, что он работает в изолированной виртуальной среде разработки, например, с virtualenv (sudo apt install python3-virtualenv
) или со встроенным Python3 (-m venv
) или на уровне пользователя (--user
опция pip, по умолчанию в pip, предоставляемой Ubuntu с 2016 года, но не для всей системы (никогда sudo pip3
!), потому что pip мешает работе диспетчера пакетов APT и может повлиять на компоненты ОС Ubuntu, когда системный модуль python неожиданно изменяется. Удачи!
P. S. Все вышеизложенное относится к "идеальному" решению (путь Debian/Ubuntu).
Если вы все еще хотите использовать новый pip3 v10 исключительно, есть 3 быстрых обходных пути:
- просто откройте новый сеанс bash (новую вкладку терминала или введите
bash
) - и pip3 v10 становится доступным (см.pip3 -V
). Debian pip3 v8 остается установленным, но не работает; или же - команда
$ hash -d pip3 && pip3 -V
обновить путь pip3 в $PATH. Debian pip3 v8 остается установленным, но не работает; или же - команда
$ sudo apt remove python3-pip && hash -d pip3
полностью удалить Debian pip3 v8 в пользу вашего нового pip3 v10.
Примечание: вам всегда нужно будет добавить --user
Отметить любой пункт, не предоставленный Debian, если только вы не в virtualenv! (развертывает пакеты Python для ~/.local/
, по умолчанию в предоставленных debian/ubuntu python3-pip и python-pip с 2016 года). Использование pip 10 в масштабе всей системы, за исключением virtualenv, не поддерживается Ubuntu/Debian. Никогда sudo pip3
!
Более подробная информация:
https://github.com/pypa/pip/issues/5221
https://github.com/pypa/pip/issues/5240
решено только в один шаг.
Я тоже сталкивался с этой проблемой, но это можно решить с помощью одной команды, не беспокоясь об этом и не теряя времени, и я пробовал это на нескольких системах, это самое чистое решение для этой проблемы. И это:
Для python3:- sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
,
Таким образом, вы можете просто установить пакеты, используя pip3
, проверить использование pip3 --version
,
Для более старых версий используйте: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
,
Теперь вы можете просто устанавливать пакеты, используя pip
, проверить использование pip --version
,
использование python -m pip install
вместо pip install
pip
(Соотв. pip3
) исполняемый файл предоставляется вашим дистрибутивом (python-pip
пакет на Ubuntu 16.04) и находится по адресу /usr/bin/pip
,
Поэтому он не обновляется с pip
Сам пакет, когда вы обновляете пип, и может сломаться.
Если вы просто используете python -m pip
непосредственно, например, как в:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
он просматривает ваш путь к Python, находит последнюю версию pip и выполняет этот файл.
Он основан на том факте, что этот файл исполняется через import
, но это очень стандартный тип интерфейса, и поэтому он менее подвержен поломкам, чем хакерский скрипт Debian.
Тогда я рекомендую добавить следующие псевдонимы к вашему .bashrc
:
pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )
Протестировано в Ubuntu 16.04 после обновления из pip3
С 9.0.1 до 18.0.
Вы можете решить эту проблему, переустановив pip.
Используйте одну из следующих команд командной строки для переустановки pip:
python2:
python -m pip uninstall pip && sudo apt install python-pip --reinstall
python3:
python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Проверьте, был ли pip кэширован по другому пути, для этого вызовите $ which pip и убедитесь, что путь отличается от того, который был предложен в ошибке, если это так:
$ hash -r
Когда кеш очистится, pip снова заработает. ссылка: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
Я работаю в системе, где у меня есть sudo apt, но нет sudo pip. (И нет доступа.) Я попал в ту же ситуацию, следуя совету из пипа:
Вы используете версию 8.1.1 pip, однако доступна 18.0. Вы должны рассмотреть возможность обновления с помощью команды 'pip install --upgrade pip'.
Ни одно из других исправлений не помогло мне, потому что у меня недостаточно прав администратора. Однако, кое-что застряло у меня от прочтения этого:
- Я не должен был этого делать. Конечно, Пип сказал мне. Лгал.
- Использование --user решает множество проблем, сосредотачиваясь на каталоге только для пользователя.
Итак, я нашел эту командную строку для работы, чтобы вернуть меня туда, где я был. Если вы использовали версию, отличную от 8.1.1, вы, очевидно, захотите изменить эту часть строки.
python -m pip install --force-reinstall pip==8.1.1 --user
Это единственное, что сработало для меня, но сработало отлично!
Восстановить с python3 -m pip install --user pip==9.0.1
(или версия, которая работала)
Я столкнулся с той же проблемой в моей системе Ubuntu 16.04. Мне удалось это исправить, переустановив pip с помощью следующей команды:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
То же самое случилось со мной на Pixelbook с использованием нового LXC (strech). Это решение очень похоже на принятое, с одной тонкой разницей, которая для меня исправлена.
sudo python3 -m pip install --upgrade pip
Это изменило версию, и теперь она работает, как и ожидалось.
Я нашел это здесь... Python.org: убедитесь, что пип актуален
Команды выше не работали для меня, но они были очень полезны:
sudo apt purge python3-pip
sudo rm -rf '/usr/lib/python3/dist-packages/pip'
sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*
sudo pip3 install jupyter
В Ubuntu 18.04.1 Bionic Beaver вам нужно выйти и снова войти (перезапускать не обязательно), чтобы получить подходящую среду.
$ sudo apt install python-pip
$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip install --upgrade pip
$ pip --version
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ exit
<login>
$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
Я использую sudo apt remove python3-pip
затем pip
работает.
~ sudo pip install pip --upgrade
[sudo] password for sen:
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
➜ ~ sudo apt remove python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
python3.5-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜ ~ pip
Usage:
pip <command> [options]
Для Python версии 2.7 @Anthony решение отлично работает, изменив python3 на python следующим образом:
sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
Что сработало для меня, чтобы исправить ошибку с помощью pip3
было:
sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3
Все работает:
demon@UbuntuHP:~$ pip -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
demon@UbuntuHP:~$ pip2 -V
pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)
demon@UbuntuHP:~$ pip3 -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
Может быть, новая версия pip 10.0.1 не обновляет бинарный файл в /usr/bin?
Я тоже сталкивался с этой проблемой, когда хотел обновить систему pip
pip3
с 9.0.1 до 19.2.3.
После запуска pip3 install --upgrade pip
, pip
версия становится 19.2.3. Ноmain()
был перемещен в pip._internal
в последней версии, которая оставляет pip3
сломан.
Итак, в файле /usr/bin/pip3
заменить line 9
: from pip import main
с from pip._internal import main
. Проблема будет исправлена, работает так же дляpython2-pip
. (Проверено в дистрибутиве Ubuntu 18.04)
По @Vincent H. в ответ
Для чего это стоит, у меня была проблема с pip
(не pip2
или же pip3
):
$ pip -V
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
Каким-то образом (я не помню, как) у меня были установлены вещи Python в моем ~/.local
каталог. После того, как я удалил каталог pip оттуда, pip
снова начал работать.
$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
Я использовал следующий код для загрузки модуля, который может потребовать установки, таким образом избегая этой ошибки (которую я также получил) - используя последнюю версию Python и последний пункт без проблем.
try
from colorama import Fore, Back, Style
except:
!pip install colorama
from colorama import Fore, Back, Style
Что-то не так с пакетами, когда он генерирует файл /usr/bin/pip, вы должны изменить импорт:
from pip import main
в
from pip._internal import main
Это решает проблему, я не уверен, почему это произвело, но это говорит что-то в следующей проблеме:
После обновления pip 10 на pyenv "ImportError: невозможно импортировать имя 'main'"
Вы можете просто исправить пути pip и pip3, используя update-alternatives
первое, что вы должны проверить, это ваш текущий $PATH
бегать echo $PATH
и посмотрите, вы можете найти /usr/local/bin
где обычно находятся pip3 и pip
здесь есть изменение, которое ищет ваша система /bin/pip
а также /bin/pip3
поэтому я скажу исправить ПУТЬ, добавив в ваш ~/.bash_profile
файл, чтобы он сохранялся
export PATH=$PATH:/usr/local/bin
а затем проверьте, исправлено ли оно с помощью which pip
а также which pip3
если нет, то используйте update-alternatives
исправить это наконец
update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30
и если вы хотите указать pip на pip3, тогда
update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30
Это сработало для меня!
hash -r pip # or hash -d pip
Теперь удалите установленную версию pip и переустановите ее, используя следующие команды.
python -m pip uninstall pip # sudo
sudo apt install --reinstall python-pip
Если точка сломана, используйте:
python -m pip install --force-reinstall pip
Надеюсь, это поможет!
Вы можете попробовать это:
sudo ln -sf $( type -P pip ) /usr/bin/pip
Выполните следующие команды, чтобы исправить. После запускаpython3 -m pip install --upgrade pip
, выполните следующую команду.
hash -r pip
Источник: https://github.com/pypa/pip/issues/5221
У меня была такая же ошибка, но python -m pip
все еще работал, поэтому я исправил это с ядерной опцией sudo python -m pip install --upgrade pip
, Это сделало это для меня.
Как сказал @cryptoboy - проверьте, какую версию pip / python вы установили
demon@UbuntuHP:~$ pip -V
demon@UbuntuHP:~$ pip2 -V
demon@UbuntuHP:~$ pip3 -V
а затем проверьте наличие ненужных библиотек в папке.local / lib /.
Я выполнял резервное копирование настроек при переходе на более новую версию Kubuntu, и в моем домашнем каталоге была папка.local/lib/python2.7/. Установленный питон 3.6. Я просто удалил старую папку и теперь все отлично работает!
импортировать main из pip._internal
from pip._internal import main
Отредактируйте код от
sudo nano /usr/bin/pip3
В Debian вам нужно будет сначала обновить apt....
sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet
Если вы пропустите 'sudo apt-get update -qq', ваш пункт будет поврежден и отобразит ошибку "не удается найти основную".
python3.6 -m pip install scipy
установить с помощью вышеуказанной команды в конкретный каталог,:)