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

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> 

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

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

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.


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

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


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


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.


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.



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!


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

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

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

0

Otwórz swój terminal linux.

hash -d pip

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.