ImportError: nie można zaimportować nazwy main podczas uruchamiania polecenia pip --version w systemie Windows7 32-bitowym

145

Zainstalowałem najnowszy Python (2.7.9) w pakiecie z pip i setuptools dla Windows 32-bit. Próbowałem ponownie zainstalować pip, ale problem nadal występuje.

Oto błąd po uruchomieniu pip --versionw Administrator cmd:

Traceback (most recent call last):
 File "D:\Python\lib\runpy.py", line 162, in _run_module_as_main
  "__main__", fname, loader, pkg_name)
 File "D:\Python\lib\runpy.py", line 72, in _run_code 
  exec code in run_globals
 File "D:\Python\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: cannot import name main
Woootiness
źródło
1
Może to być związane z uprawnieniami do plików, tutaj był problem z Pythonem 3.4 , który został rozwiązany, warto to sprawdzić.
Kobi K,
Obejście problemu wykonałem za pomocą polecenia icacls, ale błąd nadal występuje.
Woootiness
2
Odpowiedź „easy_install -U pip” dostępna pod adresem stackoverflow.com/questions/28031277/ ...
unpack

Odpowiedzi:

172

Mimo że pierwotne pytanie wydaje się pochodzić z 2015 r., Ten „błąd” wydaje się mieć również wpływ na instalacje użytkowników pip-10.0.0.

Rozwiązaniem nie jest modyfikowanie pip, ale zmiana sposobu wywoływania pip. Zamiast wywoływać /usr/bin/pipcall pipza pośrednictwem samego Pythona. Na przykład zamiast poniżej:

pip install <package>

Jeśli z Pythona w wersji 2 (lub wywoływany jest domyślny plik binarny Pythona python) wykonaj:

python -m pip install <package>

lub jeśli z Pythona w wersji 3:

python3 -m pip install <package> 
Wan Bachtiar
źródło
tak, nie pamiętam, co zrobiłem, aby to naprawić, ale pozostawiam to otwarte dla innych.
Woootiness
Kiedy użyłem podanego polecenia, wystąpił błąd uprawnień (który otrzymałem również po zmianie pip zgodnie z odpowiedzią catalinpopescu). Jednak, aby pobrać pakiety dla zakresu użytkownika (abyś nie potrzebował uprawnień administratora), użyj: python3 -m pip install <pakiet> --user (działa dla python3, powinien również działać dla python2, chociaż nie jest testowany)
randmin
Pomógł mi na Macu.
Charles Ross
Lepsza odpowiedź. Modyfikowanie kodu źródłowego to bagno.
ozgur
To naprawdę dobra droga. Ułatwia to również uzyskanie pewności, że używasz właściwej wersji:python2 -m pip install $package
JamesTheAwesomeDude
257

Błąd znajduje się 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())
catalinpopescu
źródło
1
Wydaje się, że to jest rozwiązanie. Próbowałem tego i jak dotąd nie ma problemu.
Khue
2
Używam pip 10.0.1 i błąd nadal istnieje. Twoje rozwiązanie pomogło. Dzięki! Czy zgłosiłeś ten błąd i rozwiązanie z powrotem do programistów?
Alexey Subach
7
Chociaż to rozwiązanie działa, prosimy o powstrzymanie się od modyfikacji pip. Zobacz bardziej przejrzyste rozwiązanie poniżej, aby pipzamiast tego wywoływać z Pythona.
Wan Bachtiar
1
Nie pomaga w "pip 10.0.1". pip --version pip 10.0.1 from /home/x/.local/lib/python2.7/site-packages/pip (python 2.7) użycie: sudo pip install tensorflow wyjście:Traceback (most recent call last): File "/usr/bin/pip", line 9, in <module> from pip import main ImportError: cannot import name main
user_x
3
@creepy_driver, ręczne modyfikowanie zainstalowanego pakietu w celu dostosowania go do środowiska nie jest zalecane, ponieważ przy następnej aktualizacji do innej wersji, tj. 10.0.3, prawdopodobnie napotkasz ten sam problem. Obejście polegające na uruchomieniu pipza pośrednictwem zainstalowanego Pythona wskaże pipowi, aby poprawnie używał odpowiedniego środowiska.
Wan Bachtiar
60

Na Ubuntu Server 16 mam ten sam problem z pythonem27. Spróbuj tego:

Zmiana

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

Do

from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())
Shuai Liu
źródło
1
Pracowałem nad ubuntu 16.04
Sameera Kumarasingha
To nie jest dobry pomysł. Jak wspomniano w innej odpowiedzi @RichardElkins: „Ludzie nie powinni tracić czasu na edycję zainstalowanych plików, które nie mają być modyfikowane po instalacji”
juergi
20

W systemie Windows 10 użyłem następujących poleceń, aby obniżyć wersję pip:

python -m pip uninstall pip
python -m pip install pip==9.0.3

Powinno to również działać na Linuksie i Macu.

kiyah
źródło
1
Powinien to być python -m pip install pip == 9.0.3
elelias
@elelias Och, nie zdawałem sobie z tego sprawy. dzięki, że mi powiedziałeś!
kiyah
1
Musiałem, python easy_install.py pip==9.0.3ponieważ po pierwszej linii pip nie znaleziono.
Suzanne
3
Działa również na Linuksie i Macu. Jest to obejście, dopóki pip / pip3 10 nie zostanie naprawiony. Ludzie nie powinni tracić czasu na edycję zainstalowanych plików, które nie mają być modyfikowane po instalacji ..
Richard Elkins
Po uaktualnieniu miałem problemy ze ścieżką, wykonałem następujące czynności, aby to zadziałało. sudo python -m pip odinstaluj pip && sudo apt zainstaluj python-pip --reinstall
webjockey Kwietnia
10

Miałem ten sam problem, ale odinstalowanie i ponowne zainstalowanie za pomocą apt i pip nie działało dla mnie.

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

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Hamza Ali
źródło
1
Miałem Pythona 2.7, więc musiałem zmienić polecenie, aby pasowało do pythona 2.7 sudo python -m pip odinstaluj pip && sudo apt zainstaluj python-pip --reinstall
webjockey
działa idealnie na ubuntu, ale myślę, że nie będzie działać na windows
zaki benz
8

Naprawiłem problem, ponownie instalując pip za pomocą get-pip.py.

  1. Pobierz get-pip z oficjalnego linku: https://pip.pypa.io/en/stable/installing/#upgrading-pip
  2. uruchomić go za pomocą commande: python get-pip.py.

Pip jest naprawiony i działa idealnie.

Bachir Mehemmel
źródło
1
Zmień Pythona get-pip-pyna Pythonaget-pip.py
YourFriend
1
Działało idealnie! Dziękuję Ci.
Shambo
U mnie też zadziałało. Dziękuję
Abhishek Kishore
2

W systemie MacOS, jeśli zainstalowałeś Pythona przez Homebrew, zmień linię w /usr/local/opt/python/libexec/bin/pip

z

from pip.internal import main

do

from pip._internal import main

Lub użyj tej jednej wkładki: sed -i '' "s/from pip import main/from pip._internal import main/" /usr/local/opt/python/libexec/bin/pip

Wyjaśnienie:

Problem jest spowodowany zmianami w pip w wersji 10, przenoszącymi wewnętrzną przestrzeń nazw poniżej, main._internala skrypt bin wprowadzony przez homebrew nadal szuka go ze starego miejsca (gdzie był w wersji 9). Problem i dyskusja https://github.com/pypa/pip/issues/5240

Madis Nõmme
źródło
1

Jeśli masz twarde łącze do pip w swoim PATH(np. Jeśli masz zainstalowanych wiele wersji Pythona), a następnie zaktualizujesz pip, możesz również napotkać ten błąd.

Rozwiązanie polega na ponownym utworzeniu twardego linku. Lub nawet lepiej, przestań używać twardych linków i używaj miękkich linków.

Martín De la Fuente
źródło
1
jak to naprawić?
user_x
1

W systemie Windows 10 miałem ten sam problem. PIP 19został już zainstalowany w moim systemie, ale się nie pojawił. Błąd był No Module Found.

python -m pip uninstall pip
python -m pip install pip==9.0.3

Obniżenie pipdo wersji 9.0.3 działało dobrze dla mnie.

Debu Shinobi
źródło
0

Dla tych, którzy mają podobne problemy z używaniem pip 10 z PyCharm, pobierz najnowszą wersję tutaj

Jacob Geryk
źródło
0

Działa na ubuntu 16.04. Krok 1:

 sudo gedit /home/user_name/.local/bin/pip

otwiera się plik z zawartością:

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

Zmienić mainsię __main__, gdyż pojawia się poniżej:

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip import __main__

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(__main__._main())

Zapisz plik i zamknij go. Gotowe!

Anas Musah
źródło
0

Spróbuj tego

#!/usr/bin/python
# 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.i
try:
    from pip import main
except ImportError:
    from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())
Abdul Gaffar
źródło
0

Proste rozwiązanie, które działa z Ubuntu, ale może rozwiązać problem również w systemie Windows:

Zadzwoń

pip install --upgrade pip
juergi
źródło
0

To rozwiązało mój problem w Ubuntu 18.04 podczas próby użycia Pythona3.6:

rm -rf ~/.local/lib/python3.6

Możesz przenieść folder w inne miejsce za pomocą mv zamiast go również usuwać, w celu przetestowania:

mv ~/.local/lib/python3.6 ./python3.6_old
Dlady
źródło
0

Otwórz swój terminal linux.

hash -d pip
Carlos Muñoz
źródło
Cześć Carlos, witamy w Stack Overflow. Aby pomóc innym użytkownikom napotkać ten problem, możesz dodać odpowiedź, aby wyjaśnić, co robi to polecenie i jak rozwiązuje problem.
CyberJacob
0

W naszym przypadku w 2020 roku przy użyciu Pythona3 rozwiązaniem tego problemu było przeniesienie instalacji Pythona do cloud-initskryptu startowego, który utworzył instancję maszyny wirtualnej.

Napotkaliśmy ten sam błąd, gdy próbowaliśmy zainstalować Python za pomocą skryptów, które użytkownicy wywoływali później w cyklu życia maszyny wirtualnej, ale przeniesienie tego samego kodu instalacyjnego Pythona do cloud-initskryptu wyeliminowało ten problem.

CodeMed
źródło