Запуск Pip3 ImportError: невозможно импортировать имя 'main'


21

Я хочу установить Scipy (уже установлена ​​Numpy). У меня установлен Python 3.5.1-3 с ОС и IDLE3 (3.5.2). Когда я ударил в терминале

sudo pip3 install scipy

Распечатывает

Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'

Я уже пытался переустановить pip3 и перезагрузить ОС, но это не изменилось. Pip3 странно работал с кем-то еще?

Ответы:


10

numpy и scipy находятся в репозиториях по умолчанию для всех поддерживаемых в настоящее время версий Ubuntu. Чтобы установить numpy и scipy для Python 3.x, откройте терминал и введите:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

Для Python 2.x это:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy python-scipy

1
python3-scipy работал просто отлично. Благодарность!
Invertible Hog Dog

1
Как говорится в другом ответе, этот ответ не связан с основной проблемой, которая связана с pip.
cjauvin

Это плохой метод ...
darkwoolf

26

Используйте python -m pip installвместоpip install

Пример:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

Я начал получать эту проблему после pipобновления:

pip install --upgrade --user pip

pip(Соотв. pip3) Исполняемым предоставляется вашим дистрибутивом ( python-pipпакет на Ubuntu 16.04).

Следовательно, он не обновляется с pipсамим пакетом при обновлении pip и может сломаться.

Если вы просто используете python -m pipнапрямую, например, как в:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

он проходит по пути Python, находит последнюю версию pip и выполняет этот файл.

Он основан на том факте, что этот файл является исполняемым, но это очень стандартный тип интерфейса, и поэтому он менее подвержен поломке, чем хакерский скрипт Debian.

Тогда я рекомендую добавить следующие псевдонимы к вашему .bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

/usr/bin/pip3Файл Ubuntu 18.04 делает:

from pip import main

и, вероятно, mainбыл удален pipв какой-то момент, который сломал вещи.

Разрывная фиксация в пипсах выглядит следующим образом: 95bcf8c5f6394298035a7332c441868f3b0169f4 «Переместить все внутренние API в pip._internal», которая вошла в пип 18.0.

Протестировано в Ubuntu 16.04 после обновления с pip39.0.1 до 18.0.

pyenv

В конечном счете, однако, для серьезной разработки Python я бы порекомендовал вам установить свой собственный локальный Python с помощью pyenv + virtualenv, что также поможет обойти эту ошибку Ubuntu: как мне установить другую версию Python с помощью apt-get?


1
Так что это работает, но я не могу быть единственным, кто качает головой здесь. Где разбивка? Почему при обновлении пункта по умолчанию не удается настроить новый пункт так, чтобы он продолжал работать?
Стивен Лу

@ SteveLu Насколько я понимаю, /usr/bin/pipон предоставляется пакетом Ubuntu Python и pipне перезаписывает его. Но pip updateон управляется pipсам по себе и не затрагивает файлы Ubuntu.
Сиро Сантилли 新疆 6 中心 法轮功 六四 事件

Привет, но такой же опыт здесь. Pip3 НЕ будет работать, независимо от того, что я сделал. Это решение работает, но как получилось ?? Сценарий Python pip подготовлен Debian- Комментарий гласит: 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. Возможно, есть способ правильно установить Python на языке Python.
будет

@ Я не уверен насчет этого комментария к документации, но я уверен, что код /usr/bin/pipделает :-)
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

20

Ошибка найдена в пипе 10.0.0.

В Linux вам нужно изменить файл: / usr / bin / pip из:

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

к этому:

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

Этот стиль обходного вовсе не кажется рекомендуется в pipкоманде.
jdk1.0

Вы спасли мой день!
Саурабх Сингх

8

У меня была такая же проблема, но удалить и переустановить с помощью apt и pip у меня не получилось.

Я видел другое решение, которое представляет простой способ восстановить путь pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

Это понизило мою версию pip3 с 19.0.3 до 8.1.1, но исправило этот симптом.
Соколиный Глаз Паркер

6

Хотя karel, возможно, решил вашу проблему «install numpy and scipy», что не так с pip в вашей системе, не было решено, так что у вас, вероятно, будет больше проблем с pip в будущем.

Глядя здесь , это, кажется, довольно распространенная недавняя проблема с pip 10 в системах Ubuntu. Вы можете найти обходные пути для этого потока, которые подойдут вам, но, надеюсь, обновление исправит это в ближайшее время.


Спасибо за то, что вы на самом деле решили проблему и не дали обходного пути, который решает проблему только частично и только для одного человека ...
Калеб Фентон

3

Установка pip как из apt, так и из самого pip может привести к этому.

В моем случае я использовал пакет pip в Ubuntu для установки pipenv, который затем установил более новую копию pip. Теперь, когда моя оболочка выполняет скрипт pip 9 в Ubuntu (для проверки запуска which pip3), а мой интерпретатор Python импортирует модуль pip 10, команда pip3 завершается неудачно. Поэтому я хочу удалить один из двух.

Справедливо предположить, что у вас есть более новый пункт по причине. В этом случае вы хотите удалить старый пункт следующим образом:

sudo apt remove python3-pip

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

~/.local/bin/pip3 uninstall pip

или что

sudo /usr/local/bin/pip3 uninstall pip


1

тип

hash -d pip3

Это должно удалить эту ошибку


3
Не могли бы вы дать больше объяснений в своем ответе: что такое «хэш» и почему он устранит ошибку?
Марк Ванхомиссен

1

Принудительная переустановка pip прекрасно работает для большинства пользователей, как показано на этой странице github:

python -m pip install --force-reinstall pip

Спасибо. Все предыдущие ответы с треском провалились, тогда как ваши сработали
Пинкья

0

Моя проблема закончилась несоответствием между python3.6 и 3.7. Установка python3.6 вставила ссылку, /usr/bin/python3 -> /usr/bin/python3.6хотя система была обновлена ​​до python3.7.

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version

-1

Это сработало для меня:

pip install --upgrade --user pip

К install --upgrade, я имею в виду то , что вы пытаетесь установить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.