Uruchamianie Pip3 ImportError: nie można zaimportować nazwy „main”

21

Chcę zainstalować Scipy (mam już zainstalowany Numpy). Mam zainstalowany Python 3.5.1-3 z systemem operacyjnym i IDLE3 (3.5.2). Kiedy uderzę w terminal

sudo pip3 install scipy

Drukuje

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

Próbowałem już ponownie zainstalować pip3 i zrestartować system operacyjny, ale to się nie zmieniło. Czy pip3 dziwnie pracuje z kimś innym?

The Invertible Hog Dog
źródło

Odpowiedzi:

10

Numpy i Scipy znajdują się w domyślnych repozytoriach wszystkich obecnie obsługiwanych wersji Ubuntu. Aby zainstalować Numpy i Scipy dla Pythona 3.x, otwórz terminal i wpisz:

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

W przypadku Python 2.x jest to:

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
Karel
źródło
1
python3-scipy działał dobrze. Dzięki!
The Invertible Hog Dog,
1
Jak podaje inna odpowiedź, ta odpowiedź nie jest związana z podstawowym problemem związanym z pipem.
cjauvin 20.04.2018
To zła metoda ...
Darkwoolf,
26

Użyj python -m pip installzamiastpip install

Przykład:

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

Zacząłem dostawać ten problem po pipaktualizacji:

pip install --upgrade --user pip

Plik pip(względny pip3) jest dostarczany przez twoją dystrybucję ( python-pippakiet na Ubuntu 16.04).

Dlatego nie jest aktualizowany z samym pippakietem podczas aktualizacji pip i może się zepsuć.

Jeśli używasz python -m pipbezpośrednio, np. Jak w:

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

przechodzi przez ścieżkę Pythona, znajduje najnowszą wersję pipa i wykonuje ten plik.

Opiera się na fakcie, że plik ten jest wykonywalny, ale jest to bardzo standardowy typ interfejsu i dlatego jest mniej prawdopodobne, że się zepsuje niż trudniejszy skrypt Debiana.

Następnie zalecamy dodanie następujących aliasów do .bashrc:

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

Plik Ubuntu 18.04 /usr/bin/pip3:

from pip import main

i prawdopodobnie mainzostał pipw pewnym momencie usunięty z tego, co zepsuło.

Wydaje się, że łamanie zatwierdzenia pip wygląda następująco: 95bcf8c5f6394298035a7332c441868f3b0169f4 „Przenieś wszystkie wewnętrzne interfejsy API do pip._internal” które przeszły do ​​pip 18.0.

Testowane w Ubuntu 16.04 po aktualizacji z pip39.0.1 do 18.0.

pyenv

Ostatecznie jednak w przypadku poważnego rozwoju Pythona po prostu zaleciłbym zainstalowanie własnego lokalnego Pythona za pomocą pyenv + virtualenv, który obejmie również ten błąd Ubuntu: Jak zainstalować inną wersję Pythona za pomocą apt-get?

Ciro Santilli
źródło
1
Więc to działa, ale nie mogę być jedynym, który kręci mi tutaj głową. Gdzie jest awaria? Dlaczego domyślne uaktualnienie pip nie ustawia nowego pipa w taki sposób, że nadal działa?
Steven Lu
@StevenLu rozumiem, że /usr/bin/pipjest dostarczany przez pakiet Ubuntu Python i pipnie zastępuje go. Ale sam pip updatejest zarządzany pipi unika dotykania plików Ubuntu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Cześć, ho, to samo doświadczenie tutaj. Pip3 NIE zadziała bez względu na to, co zrobiłem. To rozwiązanie działa, ale dlaczego? Skrypt pip Pythona jest przygotowany przez: Debian- Komentarz mówi: 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. Być może istnieje sposób, aby poprawnie zainstalować Pythona w sposób pythonowy.
będzie
@will Nie jestem pewien tego komentarza do dokumentacji, ale jestem pewien, co /usr/bin/piprobi kod :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
20

Błąd został znaleziony w pip 10.0.0.

W Linuksie musisz zmodyfikować plik: / usr / bin / pip z:

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

do tego:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())
Herman
źródło
Ten styl obejścia nie wydaje się zalecany przez pipzespół.
jdk1.0
Uratowałeś mi dzień !!
Saurabh Singh,
8

Miałem ten sam problem, ale odinstalowanie i ponowna instalacja za pomocą apt i pip nie działały dla mnie.

Widziałem inne rozwiązanie, które przedstawia prosty sposób na odzyskanie ścieżki pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Hamza Ali
źródło
To obniżyło moją wersję pip3 z 19.0.3 do 8.1.1, ale naprawiło ten symptom.
Hawkeye Parker
6

Chociaż Karel mógł rozwiązać problem z „instalacją numpy i scipy”, to, co jest nie tak z pipem w twoim systemie, nie zostało rozwiązane, więc prawdopodobnie będziesz miał więcej problemów z pipem w przyszłości.

Patrząc tutaj , wydaje się, że jest to dość powszechny ostatnio problem z pipem 10 w systemach Ubuntu. Możesz znaleźć pewne obejścia tego wątku, które działają dla ciebie, ale mam nadzieję, że aktualizacja to naprawi wkrótce.

JMAA
źródło
Dziękujemy za faktyczne rozwiązanie problemu i nie obejście go, który rozwiązuje problem tylko częściowo i tylko dla jednej osoby ...
Caleb Fenton
3

Może to spowodować zainstalowanie pip zarówno z apt, jak i samego pip.

W moim przypadku użyłem pakietu pip Ubuntu do zainstalowania pipenv, który następnie zainstalował nowszą kopię pip. Teraz, ponieważ moja powłoka uruchamia skrypt pip 9 Ubuntu (aby zweryfikować uruchomieniewhich pip3 ), a mój interpreter Python następnie importuje moduł pip 10, polecenie pip3 kończy się niepowodzeniem. Więc chcę odinstalować jeden z dwóch.

Można słusznie założyć, że masz nowy pip z jakiegoś powodu. W takim przypadku chcesz odinstalować starszą pip:

sudo apt remove python3-pip

Jeśli wiesz na pewno, że nie masz nic przeciwko starszemu pipowi i wolisz pakiet systemowy, odinstaluj nowszy:

~/.local/bin/pip3 uninstall pip

lub w przeciwnym razie

sudo /usr/local/bin/pip3 uninstall pip

Jeff C.
źródło
1

rodzaj

hash -d pip3

To powinno usunąć ten błąd

Kok
źródło
3
Czy możesz podać więcej wyjaśnień na temat swojej odpowiedzi: co to jest „skrót” i dlaczego miałby usunąć błąd?
Marc Vanhoomissen
1

Wymuszenie ponownej instalacji pip działa dobrze dla większości użytkowników, jak pokazano na tej stronie github:

python -m pip install --force-reinstall pip
subtleseeker
źródło
Dziękuję Ci. Wszystkie poprzednie odpowiedzi zawiodły żałośnie, podczas gdy twoje zadziałały
Pynchia
0

Mój problem okazał się być niezgodnością między python3.6 a 3.7. Instalacja Python3.6 umieściła łącze, /usr/bin/python3 -> /usr/bin/python3.6mimo że system został zaktualizowany do wersji 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
Gregory Alan Bolcer
źródło
-1

To działało dla mnie:

pip install --upgrade --user pip

Przez install --upgrade, to znaczy cokolwiek próbujesz zainstalować.

Alex Jolig
źródło