ImportError: impossibile importare il nome principale durante l'esecuzione del comando pip --version in Windows 7 a 32 bit


144

Ho installato l'ultimo Python (2.7.9) in bundle con pip e setuptools per Windows a 32 bit. Ho provato a reinstallare pip ma il problema persiste.

Ecco l'errore dopo l'esecuzione pip --versionin cmd amministratore:

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
Potrebbe essere correlato all'autorizzazione del file. Qui è stato risolto un problema con Python 3.4 , che vale la pena verificare.
Kobi K,

Ho risolto il problema usando il comando icacls ma l'errore persiste.
Woootiness

2
La risposta "easy_install -U pip" è disponibile su stackoverflow.com/questions/28031277/… unpack-url
J1MF0X

Risposte:


172

Anche se la domanda originale sembra essere del 2015, questo 'bug' sembra influenzare anche l'installazione degli utenti pip-10.0.0.

La soluzione alternativa non è quella di modificare pip, tuttavia per cambiare il modo in cui viene chiamato pip. Invece di chiamare la /usr/bin/pipchiamata piptramite Python stesso. Ad esempio, anziché il seguente:

pip install <package>

Se dalla versione 2 di Python (o viene chiamato il binario Python predefinito python):

python -m pip install <package>

o se dalla versione 3 di Python:

python3 -m pip install <package> 

sì, non ricordo cosa ho fatto per risolvere questo problema, ma lo tengo aperto per gli altri.
Woootiness,

Quando ho utilizzato il comando dato, ho ricevuto un errore di permessi (che ho anche ottenuto dopo aver modificato pip secondo la risposta di catalinpopescu). Tuttavia, per scaricare i pacchetti per l'ambito dell'utente (in modo da non avere bisogno dei diritti di amministrazione) usare: python3 -m pip install <pacchetto> --user (funziona per python3, dovrebbe funzionare anche per python2 anche se non testato)
randmin

Mi ha aiutato su un Mac.
charles ross,

Risposta migliore. La modifica del codice sorgente è una palude.
ozgur,

Questo è davvero un buon modo per andare. Rende anche molto facile avere la certezza che stai usando la versione giusta:python2 -m pip install $package
JamesTheAwesomeDude

256

Il bug si trova nel pip 10.0.0.

In Linux è necessario modificare il file: / usr / bin / pip da:

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

a questa:

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

1
Sembra che questa sia la soluzione. Ho provato questo e nessun problema finora.
Khue,

2
Sto usando pip 10.0.1 e il bug è ancora lì. La tua soluzione ha aiutato. Grazie! Hai segnalato questo errore e la soluzione agli sviluppatori?
Alexey Subach,

7
Sebbene questa soluzione funzioni, si prega di astenersi dal modificarsi pip. pipInvece, vedi una soluzione più pulita di seguito per chiamare da Python.
Wan Bachtiar,

1
Non aiuta su "pip 10.0.1". pip --version pip 10.0.1 from /home/x/.local/lib/python2.7/site-packages/pip (python 2.7) utilizzo: sudo pip install tensorflow output: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, la modifica manuale di un pacchetto installato in base all'ambiente non è consigliata perché la prossima volta che si aggiorna a un'altra versione, ovvero 10.0.3, è probabile che si verifichi lo stesso problema. La soluzione alternativa all'esecuzione piptramite Python installato punterà pip per utilizzare correttamente l'ambiente adatto.
Wan Bachtiar,

60

Su Ubuntu Server 16, ho lo stesso problema con python27. Prova questo:

Modificare

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

Per

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

1
Ha lavorato su Ubuntu 16.04
Sameera Kumarasingha il

Questa non è una buona idea. Come menzionato in un'altra risposta di @RichardElkins: "La gente non dovrebbe perdere tempo a modificare i file installati che non devono essere modificati dopo l'installazione"
juergi,

20

Su Windows 10, ho usato i seguenti comandi per eseguire il downgrade del pip:

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

Questo dovrebbe funzionare anche su Linux e Mac.


1
Dovrebbe essere python -m pip install pip == 9.0.3
elelias il

@elelias Oh, non me ne sono reso conto. grazie per avermelo detto!
kiyah,

1
Ho dovuto python easy_install.py pip==9.0.3perché dopo la prima riga, pip non è stato trovato.
Suzanne,

3
Funziona anche su Linux e Mac. È una soluzione alternativa fino a quando pip / pip3 10 non viene riparato. La gente non dovrebbe perdere tempo a modificare i file installati che non devono essere modificati dopo l'installazione ..
Richard Elkins,

Ho avuto problemi di percorso dopo l'aggiornamento, ho fatto quanto segue per farlo funzionare. sudo python -m pip disinstalla pip && sudo apt installa python-pip --reinstall
webjockey

10

Ho avuto lo stesso problema, ma disinstallare e reinstallare con apt e pip non ha funzionato per me.

Ho visto un'altra soluzione che presenta un modo semplice per recuperare il percorso pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

1
Avevo python 2.7, quindi ho dovuto modificare il comando per abbinare python 2.7 sudo python -m pip disinstallare pip && sudo apt installare python-pip --reinstall
webjockey

funziona perfettamente su Ubuntu ma penso che non funzionerà su Windows
zaki benz


2

Su MacOS se hai installato Python tramite Homebrew, modifica la linea /usr/local/opt/python/libexec/bin/pip

a partire dal

from pip.internal import main

per

from pip._internal import main

O usa questa fodera: sed -i '' "s/from pip import main/from pip._internal import main/" /usr/local/opt/python/libexec/bin/pip

Spiegazione:

Il problema è causato dalle modifiche nella versione pip 10 che sposta lo spazio dei nomi interno sotto main._internale lo script bin messo in atto da homebrew lo guarda ancora dal vecchio posto (dove era nella versione 9). Problema e alcune discussioni https://github.com/pypa/pip/issues/5240


1

Se hai un hardlink da pipare nel tuo PATH(cioè se hai installato più versioni di Python) e quindi aggiorni pip, potresti anche riscontrare questo errore.

La soluzione consiste nel creare nuovamente il collegamento reale. O ancora meglio, smetti di usare i hardlink e usa i softlink.


1
come risolvere questo?
user_x

1

Su Windows 10, ho avuto lo stesso problema. PIP 19era già installato nel mio sistema ma non veniva visualizzato. L'errore è stato No Module Found.

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

Il downgrade pipa 9.0.3 ha funzionato bene per me.



0

Funziona su Ubuntu 16.04. Passo 1:

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

un file si apre con il contenuto:

#!/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())

Cambia mainin __main__come appare sotto:

#!/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())

Salva il file e chiudilo. E il gioco è fatto!


0

prova questo

#!/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

Una soluzione semplice che funziona con Ubuntu, ma potrebbe risolvere il problema anche su Windows:

Chiama soltanto

pip install --upgrade pip

0

Questo ha risolto il mio problema in Ubuntu 18.04 quando provavo ad usare python3.6:

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

Puoi spostare la cartella in un'altra posizione usando mv invece di eliminarla, per testare:

mv ~/.local/lib/python3.6 ./python3.6_old

0

Apri il tuo terminale linux.

hash -d pip

Ciao Carlos, benvenuto su Stack Overflow. Per aiutare altri utenti ad affrontare questo problema, potresti aggiungere una risposta per chiarire cosa fa questo comando e come risolve il problema.
CyberJacob,

0

Nel nostro caso, nel 2020 usando Python3, la soluzione a questo problema era spostare l'installazione di Python nello cloud-initscript di avvio che ha istanziato la VM.

Stavamo riscontrando lo stesso errore quando stavamo tentando di installare Python utilizzando script richiamati dagli utenti più avanti nel ciclo di vita della VM, ma spostando lo stesso codice di installazione di Python nello cloud-initscript è stato eliminato questo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.