Запуск 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 працював просто чудово. Спасибі!
Перевернута собака

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 "$@" )

Файл Ubuntu 18.04 /usr/bin/pip3робить:

from pip import main

і, мабуть, mainбув знятий з pipякогось моменту, який саме зламав речі.

Здійснюється переривчастий піп-код : 95bcf8c5f6394298035a7332c441868f3b0169f4 "Перемістити всі внутрішні API на pip._internal", який перейшов у pip 18.0.

Тестували в Ubuntu 16.04 після оновлення з pip39.0.1 до 18.0.

pyenv

Зрештою, для серйозної розробки Python я б просто рекомендував вам встановити свій власний локальний Python з pyenv + virtualenv, який би також обійшов цю помилку Ubuntu: Як встановити іншу версію Python за допомогою apt-get?


1
Так це працює, але я не можу бути єдиним, хто тут хитає головою. Де поломка? Чому оновлення піп за замовчуванням не вдається встановити новий піп так, щоб він продовжував працювати?
Стівен Лу

@StevenLu я розумію, що /usr/bin/pipнадається пакетом Ubuntu Python, і pipвін не перезаписує його. Але pip updateуправління керується pipсамо собою і уникає торкання файлів Ubuntu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Привіт, хо ж досвід тут. Pip3 НЕ працює, незважаючи на те, що я робив. Це рішення працює, але як же ?? Сценарій піт-пітону підготовлений 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робить код :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

20

Помилка виявлена ​​в pip 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, можливо, вирішив вашу проблему "встановити numpy and scipy", що не так з pip у вашій системі не було вирішено, так що, ймовірно, буде більше проблем із тим, щоб піп рухався вперед.

Дивлячись сюди , здається, досить часто зустрічається нещодавнє видання з pip 10 для систем Ubuntu. Можливо, ви знайдете якісь твори навколо цієї нитки, які працюють для вас, але, сподіваємось, оновлення скоро це виправить.


Дякую за те, що фактично виправили проблему та не дали вирішення проблеми, яка вирішує проблему лише частково та лише для однієї людини ...
Caleb Fenton

3

Встановлення pip як apt, так і самого 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.