Błąd po aktualizacji pip: nie można zaimportować nazwy „main”

467

Ilekroć próbuję zainstalować dowolny pakiet za pomocą pip, pojawia się ten błąd importu:

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())

Wcześniej działało dobrze, nie jestem pewien, dlaczego powoduje ten błąd. Szukałem tego błędu, ale nie mogę nic znaleźć, aby go naprawić.

Daj mi znać, jeśli będziesz potrzebować dalszych informacji, zaktualizuję moje pytanie.

g_p
źródło
1
Dodatkowa dyskusja pod tym linkiem .
Przekątna
7
Miałem ten sam problem, ponieważ pip install --upgrade pipaktualizowałem pip na serwerze, na którym nie mam uprawnień administratora. Odinstalowanie pipa python -m pip uninstall piprozwiązało mój problem.
Foad
Odpowiedzi mi nie pomogły. To był mój problem: github.com/pypa/pipenv/issues/2095
Étienne

Odpowiedzi:

846

Musisz przypadkowo zaktualizować swój systemowy pip (prawdopodobnie przez coś takiego sudo pip install pip --upgrade)

pip 10.x dostosowuje, gdzie znajdują się jego elementy wewnętrzne. pip3Polecenia widzisz to jeden dostarczony przez opiekuna (przypuszczalnie w oparciu o Debiana?) I nie jest to plik zarządzany przez PIP.

Możesz przeczytać więcej na ten temat na trackerze problemów pip

Prawdopodobnie będziesz chciał nie aktualizować swojego pipa systemowego i zamiast tego użyć virtualenv.

Aby odzyskać pip3 plik binarny, musisz to zrobić sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Jeśli chcesz kontynuować na „nieobsługiwanym terytorium” (uaktualnianiu pakietu systemowego poza menedżerem pakietów systemowych), prawdopodobnie możesz python3 -m pip ...zamiast tego uciec pip3.

Anthony Sottile
źródło
28
sudo apt install python3-pip --reinstallnie naprawiłem problemu, jednak mogę zainstalować pakiet za pomocą python3 -m pip. Dzięki za pomoc. Zaznaczam to jako zaakceptowane.
g_p
2
@g_p zaktualizował instrukcje „naprawiania” - właśnie zweryfikował je w oknie dokowanym (powinienem to zrobić za pierwszym razem!)
Anthony Sottile
5
Muszę użyć polecenia „python -m pip uninstall pip”, ponieważ „sudo pip odinstaluj pip” dał podobny błąd do pierwotnego pytania
Mz A
41
Dzięki! To pomogło! Użyj sudo python -m pip uninstall pip && sudo apt install python-pip --reinstalldla python2!
Barmaley
1
Działa w systemie Ubuntu w systemie Windows. Rozwiązaniem jest to, co @Barmaley sugeruje dla python2 (domyślny interpreter python).
jdhao
110

Możemy usunąć błąd, modyfikując plik pip.

Sprawdź lokalizację pliku:

$ which pip

ścieżka -> / usr / bin / pip

Przejdź do tej lokalizacji ( / usr / bin / pip ) i otwórz terminal

Wchodzić: $ sudo nano pip

Możesz zobaczyć:

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

Zmień na:

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

następnie ctrl + o napisz zmiany i wyjdź

Mam nadzieję, że to zrobi !!

Vijay Athithya
źródło
1
Wprowadzenie tych zmian nie rozwiązało problemu, ale zmieniło go z powrotem na oryginalny tekst. ¯_ (ツ) _ / ¯
David,
2
Próbowałem tego, ale dostałemAttributeError: module 'pip.__main__' has no attribute 'main'
dnnagy
4
Upewnij się, że napisałeś _main () nie main ()
vijay athithya
2
w najnowszej wersji pip3The main()przesuwa się pip._internal. Deklaracja importu powinna zostać zmieniona nafrom pip._internal import main
Yossarian42
2
Działa jak urok! Dzięki
mahesh nanayakkara,
69

Dla rodziny Ubuntu, Debian, Linux Mint

Dzięki powyższemu wyjaśnieniu Anthony'ego możesz zachować oryginalny systemowy pip (w / usr / bin / i dist-packages /) i usunąć ręcznie zainstalowany pip (w ~ / .local /), aby rozwiązać konflikt:

$ python3 -m pip uninstall pip

Ubuntu / Debian pip v8.1.1 (16.04) z python3-pippakietu debian (patrz $ pip3 -V) pokazuje te same wyniki wyszukiwania co najnowszy pip v10.0.1 i instaluje najnowsze moduły z PyPI w porządku. Ma działające pippolecenie (już w $ PATH), a także ładną --useropcję domyślnie załataną od 2016 roku. Patrząc na informacje o wydaniu pip , nowsze wersje dotyczą głównie poprawek błędów specyficznych dla poszczególnych przypadków użycia i niektórych nowych funkcji, więc nie wszyscy muszą jeszcze przyspieszyć aktualizację pip. Poza tym nowy pip 10 można wdrożyć na wirtualnych wirtualnych językach Pythona.

Ale bez względu na pipsy, twój system operacyjny pozwala na szybką instalację popularnych modułów Pythona (w tym numpy) z APT, bez potrzeby pipowania, na przykład:
$ sudo apt install python3-numpy python3-scipy(z zależnościami systemowymi)
$ sudo apt install python3-pip( łatka Debiana, nieco starsza, ale to nie ma znaczenia)

Szybkie przypomnienie o składni apt ( man aptszczegółowe informacje):
$ sudo apt update(aby ponownie zsynchronizować pliki indeksu pakietów Ubuntu z aktualnych źródeł)
$ apt search <python-package-name> (wyszukiwanie pełnotekstowe wszystkich dostępnych pakietów)
$ apt show <python-package-name>(wyświetla szczegółowy opis pakietu)
$ sudo apt install <python-package-name>

Nazwy pakietów z prefiksem python-są dla języka Python 2; i przedrostkiem python3-są dla Python 3 (np. python3-panda). Są tysiące i przechodzą testy integracyjne w ramach Debiana i Ubuntu. Jeśli nie chcesz instalować na poziomie użytkownika ( pip install --useropcja) lub w virtualenv / venv, apt może być tym, czego potrzebujesz. Te pakiety systemowe są również dostępne z wirtualnych środowisk, ponieważ virtualenv z wdziękiem wróci do korzystania z bibliotek systemowych podczas importowania, jeśli środowiska nie otrzymały kopii modułów. Twoje niestandardowo zainstalowane (z pipem --user) moduły dla poszczególnych użytkowników ~/.local/librównież je zastąpią.

Uwaga: ponieważ jest to instalacja ogólnosystemowa , rzadko trzeba je usuwać (należy pamiętać o zależnościach systemu operacyjnego). Jest to wygodne dla pakietów z wieloma zależnościami systemowymi (np. Z scipy lub matplotlib), ponieważ APT będzie śledzić i zapewnia wszystkie wymagane biblioteki systemowe i rozszerzenia C, podczas gdy w przypadku pipa nie masz takich gwarancji .

W rzeczywistości, dla ogólnosystemowych pakietów Python (w przeciwieństwie do na użytkownika, poziom katalogu domowego lub niższy), Ubuntu oczekuje użycia menedżera pakietów APT (zamiast sudo pip), aby uniknąć uszkodzenia systemu operacyjnego: sudo pip3celuje w ten sam /usr/lib/python3/dist-packageskatalog, w którym APT przechowuje system operacyjny wrażliwe moduły. Najnowsze wydania Debian / Ubuntu w dużym stopniu zależą od Python 3, więc jego wstępnie zainstalowanymi modułami zarządza apti nie należy ich zmieniać.

Więc jeśli używasz pip3 installpolecenia, upewnij się, że działa on w izolowanym środowisku wirtualnegosudo apt install python3-virtualenv dewelopera , takim jak virtualenv ( ) lub z wbudowanym Python3 ( -m venv), lub na poziomie użytkownika ( --useropcja pip, domyślnie w Ubuntu pip od 2016 r.), ale nie w całym systemie (nigdy sudo pip3!), ponieważ pip zakłóca działanie menedżera pakietów APT i może wpływać na komponenty systemu operacyjnego Ubuntu , gdy nieoczekiwanie zmieni się używany przez system moduł python. Powodzenia!


P. S. Wszystkie powyższe dotyczą rozwiązania „idealnego” (sposób Debian / Ubuntu).

Jeśli nadal chcesz używać wyłącznie nowego pip3 v10, istnieją 3 szybkie obejścia:

  • po prostu otwórz nową sesję bash (nowa karta lub typ terminala bash) - a pip3 v10 stanie się dostępny (patrz pip3 -V). Pip3 v8 debiana pozostaje zainstalowany, ale jest uszkodzony; lub
  • polecenie $ hash -d pip3 && pip3 -V odświeżenia ścieżki pliku pip3 w zmiennej $ PATH. Pip3 v8 debiana pozostaje zainstalowany, ale jest uszkodzony; lub
  • polecenie $ sudo apt remove python3-pip && hash -d pip3całkowitego odinstalowania pip3 v8 Debiana, na korzyść nowego pip3 v10.

Uwaga: Zawsze będziesz musiał dodać --userflagę do każdego pipa nie dostarczonego przez Debiana, chyba że jesteś w virtualenv! (wdraża pakiety Pythona ~/.local/, domyślnie w dostarczonych przez debian / ubuntu python3-pip i python-pip od 2016). Twoje użycie pip 10 w całym systemie, poza virtualenv, nie jest tak naprawdę obsługiwane przez Ubuntu / Debian. Nigdy sudo pip3!

Dalsze szczegóły:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

Alex C.
źródło
Czy możesz mi pomóc zrozumieć, dlaczego instalacja zaktualizowanej wersji pip lokalnej z --user, tj. Bez sudo, wpływa na moją zdolność do uruchomienia zainstalowanego apt pip? Myślałem, że te dwa będą współistnieć. Ale jak pokazuje ta lista , apt po zainstalowaniu pęka python3 -m pip install --user --upgrade pip. Nie szukam rozwiązania - jestem naprawdę ciekawy, co się tutaj dzieje.
George Hawkins,
1
@George Zdarza się to z powodu niezgodności między bibliotekami pip a ich opakowaniami, które je importują. Próba natychmiastowego uruchomienia komendy systemowej pip (bez zastosowania żadnego z rozwiązań ) nadal wywoływałaby zainstalowaną apt apt wersję skryptu otoki pipa /usr/bin/pip3zamiast tej zainstalowanej jako --user( ~/.local/bin/pip*) zgodnie z systemem operacyjnym $ PATH, który wciąż jest ustawiony do uruchamiania systemowa wersja opakowania, ale nie bibliotek.
Alex C.,
2
@George Wynika to z faktu, że jest teraz zainstalowany nowszy pakiet pip, ~/.local/lib/python3.?/site-packages/pipktóry ma pierwszeństwo przed systemem apt apt we względnym imporcie Pythona (lokacja użytkownika ma wyższy priorytet niż globalne biblioteki lib). A ponieważ starsze opakowanie próbuje from pip import mainzamiast from pip._internalswojej __main__klasy w stosunku do nowszej wersji pakietu pip, polecenie pip z gist kończy się niepowodzeniem ImportError: cannot import name 'main'. Tak więc oba pipsy mogą współistnieć (na dysku), ale funkcjonalność oryginalnego systemu zostanie „zepsuta” ..
Alex C.,
+1 dla --user. pip install --userco mi to zrobiło. (Mam Python 2.7, Python 3.6 i Python 3.7, wszystkie zainstalowane na Ubuntu 18.04 LTS.)
Stephen G Tuggy
46

rozwiązany tylko w jednym kroku.

Ja również napotkałem ten problem, ale można go rozwiązać po prostu jednym poleceniem bez zawracania głowy i marnowania czasu, a ja wypróbowałem to na wielu systemach, jest to najczystsze rozwiązanie tego problemu. I to jest:

Dla python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Dzięki temu możesz po prostu zainstalować pakiety za pomocą pip3. sprawdzić użycie pip3 --version.

Dla starszych wersji, należy: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall.

Dzięki temu teraz możesz po prostu zainstalować pakiety za pomocą pip. sprawdzić użycie pip --version.

Saket
źródło
31

Użyj python -m pip installzamiastpip install

Przykład:

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

Plik wykonywalny pip(lub. pip3) Jest dostarczany przez Twoją dystrybucję ( python-pippakiet na Ubuntu 16.04) i znajduje się na /usr/bin/pip.

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ę pip i wykonuje ten plik.

Opiera się na fakcie, że plik jest wykonywalny import, 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 zatwierdzania 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 zalecam zainstalowanie własnego lokalnego Pythona za pomocą pyenv + virtualenv, który obejmie również ten błąd Ubuntu: /ubuntu/682869/how-do-i- install-a-different-python-version-using-apt-get / 1195153 # 1195153

Ciro Santilli
źródło
3
po 5 godzinach poszukiwań zadziałało to dla mnie. Mogę dostarczyć ci kwiatek, jeśli wyślesz mi swój adres. Dziękuję Ci.
cagri
18

Możesz rozwiązać ten problem, ponownie instalując pip.

Użyj jednego z następujących poleceń wiersza poleceń, aby ponownie zainstalować 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
Codemaker
źródło
8

Pracuję na systemie, w którym mam sudo apt, ale nie mam sudo pip. (I nie ma dostępu do su). Dotarłem do tej samej sytuacji, postępując zgodnie z radą pip:

Używasz pip w wersji 8.1.1, jednak 18.0 jest dostępne. Należy rozważyć aktualizację za pomocą polecenia „pip install --upgrade pip”.

Żadna z pozostałych poprawek nie działała dla mnie, ponieważ nie mam wystarczających uprawnień administratora. Jednak kilka rzeczy utkwiło mi w pamięci po przeczytaniu tego:

  • Nie powinnam tego robić. Jasne, pip mi kazał. Kłamał.
  • Korzystanie z opcji --user rozwiązuje wiele problemów, koncentrując się na katalogu tylko dla użytkownika.

Znalazłem więc ten wiersz poleceń, aby przywrócić mnie z powrotem do miejsca, w którym byłem. Jeśli używasz innej wersji niż 8.1.1, oczywiście będziesz chciał zmienić tę część linii.

python -m pip install --force-reinstall pip==8.1.1 --user

To jedyna rzecz, która działała dla mnie, ale działała idealnie!

Scott Mermelstein
źródło
7

Odzyskaj za pomocą python3 -m pip install --user pip==9.0.1(lub wersji, która działała)

Claire
źródło
5

To samo stało się ze mną na Pixelbook przy użyciu nowego LXC (strech). To rozwiązanie jest bardzo podobne do przyjętego, z jedną subtelną różnicą, dla mnie poprawiony pip3.

sudo python3 -m pip install --upgrade pip

To zderzyło wersję, a teraz działa zgodnie z oczekiwaniami.

Znalazłem to tutaj ... Python.org: Upewnij się, że pip jest aktualny

fliptopbox
źródło
4

Ten sam problem spotkałem w moim systemie Ubuntu 16.04. Udało mi się to naprawić, ponownie instalując pip za pomocą następującego polecenia:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

jkjung13
źródło
Ma tę zaletę, że instalujesz go ze źródła i żadne z powyższych nie działało na czystym pustym Debianie 9 (od mojego dedykowanego dostawcy serwerów)
Peter Rosemann
kręcąc internet dla superużytkownika, co może pójść nie tak!
Sum1sAdmin
3

Powyższe polecenia nie działały dla mnie, ale były bardzo pomocne:

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
Pierrot
źródło
2

W Ubuntu 18.04.1 Bionic Beaver musisz się wylogować i zalogować ponownie (ponowne uruchomienie nie jest konieczne), aby uzyskać odpowiednie środowisko.

$ 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)
Jeff Hoye
źródło
1

Używam sudo apt remove python3-pip wtedy pipdziała.

 ~ 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]
Jim Gabriel
źródło
1
To dlatego, że pipjest dla Pythona 2. Używa OP pip3, wersja Python 3 pip, którą właśnie usunąłeś. Te dwa są odrębne i niewymienne.
Neinstein,
1

W przypadku Pythona w wersji 2.7 @Anthony rozwiązanie działa idealnie, zmieniając Python3 na Python w następujący sposób:

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
ewalel
źródło
1

To, co zadziałało, aby naprawić błąd przy użyciu, pip3to:

sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

Wszystko działa poprawnie:

 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)

Może nowa wersja pip 10.0.1 nie aktualizuje pliku binarnego w / usr / bin? (co wydaje się, że nie)

EDYCJA: ten sam problem występuje w Ubuntu 18.04. Najlepszym rozwiązaniem, jakie znalazłem, jest dowiązanie plików binarnych pip /home/<user/.local/bindo /usr/local/binlub /usr/bin(w zależności od twoich preferencji) w następujący sposób:

ln -sv /home/<user>/.local/bin/pip /usr/local/bin/pip
ln -sv /home/<user>/.local/bin/pip2 /usr/local/bin/pip2
ln -sv /home/<user>/.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home/<user>/.local/bin/pip3 /usr/local/bin/pip3
ln -sv /home/<user>/.local/bin/pip3.6 /usr/local/bin/pip3.6

UWAGA: wymienić <user> aktualnego użytkownika

Powiązane wersje (najnowsze) znajdują się w:

Wersja 3.6:

/home/demon/.local/lib/python3.6/site-packages/pip (python 3.6)

Wersja 2.7:

/home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

cryptoboy
źródło
Ten naprawił mój problem. Inne odpowiedzi nie.
Amin Husni,
1
/usr/binJednak naprawdę nie powinieneś zadzierać bezpośrednio z plikami . A twój PATHbłąd jest błędny, jeśli /usr/local/binnie wcześniej /usr/bin.
tripleee
Plik binarny pip nie istnieje /usr/local/bin. Jest tylko w /home/<user>/.local/bini / lub /home/<user>/.local/lib/python<version>/site-packages/pipw nowych wersjach (wersja 10.0 + nie aktualizuje pliku binarnego /usr/bin). Stąd powód utworzenia kopii lub dowiązania symbolicznego pliku binarnego w /usr/binlub /usr/local/bin(w zależności od preferencji użytkownika), aby pip mógł być uruchamiany globalnie z wiersza poleceń.
cryptoboy
Pliki binarne katalogu pip istnieją i powinny zostać połączone / skopiowane z: demon @ Bionic18: ~ / .local / bin $ ls pip pip2 pip2.7 pip3 pip3.6 pipDomyślnie binarna jest najnowsza wersja zainstalowana w systemie
cryptoboy
0

Sztuczka i też działa

sudo -H pip zainstaluj lxml

Czołg Tejas
źródło
0

Miałem ten sam błąd, ale python -m pipnadal działałem, więc naprawiłem go z opcją nuklearną sudo python -m pip install --upgrade pip. Zrobił to dla mnie.

Sergiu
źródło
0

Z tego, co jest warte, miałem problem z pip(nie pip2lub 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)

W jakiś sposób (nie pamiętam jak) miałem zainstalowane w Pythonie rzeczy w języku Python ~/.local. Po usunięciu stamtąd katalogu pip, pipzacząłem ponownie działać.

$ 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)
Michael Burr
źródło
0

Możesz spróbować:

sudo ln -sf $( type -P pip ) /usr/bin/pip
Vitthal Sarode
źródło
3
Chociaż ten kod może odpowiedzieć na pytanie, lepiej byłoby dołączyć jakiś kontekst, wyjaśniając, jak to działa i kiedy go używać. Odpowiedzi zawierające tylko kod nie są przydatne na dłuższą metę.
Giulio Caccin,
0

pip pip3Wystąpił również ten problem, gdy chciałem zaktualizować system z wersji 9.0.1 do 19.2.3.

Po uruchomieniu pip3 install --upgrade pip, pipwersja staje 19.2.3. Ale main()został wprowadzony w pip._internalnajnowszej wersji, która pozostawia pip3zepsute.

Więc w pliku /usr/bin/pip3, należy wymienić line 9: from pip import mainz from pip._internal import main. Problem zostanie naprawiony, działa tak samo dla python2-pip. (Testowane na dystrybucji Ubuntu 18.04)

Według @Vincent H. odpowiedź

Yossarian42
źródło
0

możesz po prostu naprawić ścieżki pip i pip3 za pomocą update-alternatives

pierwszą rzeczą, którą powinieneś sprawdzić, jest twój bieżący $PATH przebieg, echo $PATHa zobaczysz, że możesz znaleźć, /usr/local/bingdzie zwykle są pip3 i pip

nastąpiła zmiana systemu szuka tutaj /bin/pipi /bin/pip3 tak powiem naprawić PATH dodając do ~/.bash_profilepliku, więc nie ustąpi

export PATH=$PATH:/usr/local/bin a następnie sprawdzanie jest ustalone za pomocą which pipiwhich pip3

jeśli nie to użyj update-alternatives aby to naprawić

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

a jeśli chcesz wskazać pip na pip3, to

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30
Uberrebu
źródło
0

To zadziałało dla mnie!

hash -r pip # or hash -d pip

Teraz odinstaluj wersję PIP i zainstaluj ją ponownie, używając następujących poleceń.

python -m pip uninstall pip  # sudo
sudo apt install --reinstall python-pip

Jeśli pip jest uszkodzony, użyj:

python -m pip install --force-reinstall pip

Mam nadzieję, że to pomoże!

Ebin Zacharias
źródło
-1

import main z pip._internal

from pip._internal import main

Edytuj kod pip z

sudo nano /usr/bin/pip3
Akhilesh NS
źródło
Czy możesz edytować odpowiedź i lepiej ją określić? Nie jest bardzo jasne, jak edytować plik /usr/bin/pip3...
M. Volf
-1

Jak powiedział @cryptoboy - sprawdź, którą wersję pip / python zainstalowałeś

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

a następnie sprawdź, czy w folderze .local / lib / nie ma potrzebnych bibliotek.

Zrobiłem kopię zapasową ustawień podczas migracji do nowszej wersji Kubuntu i miałem folder .local / lib / python2.7 / w moim katalogu domowym. Zainstalowany python 3.6. Właśnie usunąłem stary folder i teraz wszystko działa świetnie!

Vergil333
źródło
-1

W Debianie musisz najpierw zaktualizować apt ....

sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet

Jeśli pominiesz „sudo apt-get update -qq”, twój pip zostanie uszkodzony i wyświetli błąd „nie mogę znaleźć głównego”.

Paul Kenjora
źródło
-1

Ten błąd może być pozwoleniem. Przetestuj więc polecenie z flagą -H :

sudo -H pip3 install numpy
Mohsen Abasi
źródło
pytanie bardzo wyraźnie mówi, że ImportError nie jest błędem uprawnień
Anthony Sottile
-1

Użyj następującego polecenia przed wykonaniem dowolnego polecenia pip

hash -d pip

To będzie działać

Muhammad Adil
źródło
1
Czy możesz wyjaśnić, w jaki sposób pomoże / + usunąć wszelkie protekcjonalne komentarze?
elf