Esecuzione di Pip3 ImportError: impossibile importare il nome 'main'


21

Voglio installare Scipy (ho già installato Numpy). Ho Python 3.5.1-3 installato con OS e IDLE3 (3.5.2). Quando ho colpito nel terminale

sudo pip3 install scipy

Si stampa

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

Ho già provato a reinstallare pip3 e riavviare il sistema operativo, ma non è cambiato. Pip3 ha funzionato in modo strano con qualcun altro?

Risposte:


10

numpy e scipy sono nei repository predefiniti di tutte le versioni attualmente supportate di Ubuntu. Per installare numpy e scipy per Python 3.x aprire il terminale e digitare:

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

Per Python 2.x è:

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

1
python3-scipy ha funzionato bene. Grazie!
The Invertible Hog Dog

1
Come afferma un'altra risposta, questa risposta non è correlata al problema di fondo, che ha a che fare con pip.
cjauvin,

È un cattivo metodo ...
darkwoolf il

26

Usa python -m pip installinvece dipip install

Esempio:

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

Ho iniziato a ricevere questo problema dopo un pipaggiornamento:

pip install --upgrade --user pip

L' eseguibile pip(resp. pip3) È fornito dalla tua distribuzione ( python-pippacchetto su Ubuntu 16.04).

Pertanto, non viene aggiornato con il pippacchetto stesso durante l'aggiornamento del pip e potrebbe non funzionare.

Se lo usi python -m pipdirettamente, ad es. Come in:

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

passa attraverso il tuo percorso Python e trova l'ultima versione di pip ed esegue quel file.

Si basa sul fatto che quel file è eseguibile, ma si tratta di un tipo di interfaccia molto standard, e quindi meno probabile che si rompa rispetto allo script hacker Debian.

Quindi ti consiglio di aggiungere i seguenti alias al tuo .bashrc:

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

Il /usr/bin/pip3file Ubuntu 18.04 fa:

from pip import main

e presumibilmente è mainstato rimosso da un pipcerto punto che è ciò che ha rotto le cose.

Il commit del pip interrotto sembra essere: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Sposta tutte le API interne in pip._internal" che è andato nel pip 18.0.

Testato in Ubuntu 16.04 dopo un aggiornamento dalla pip39.0.1 alla 18.0.

pyenv

In definitiva, tuttavia, per un serio sviluppo di Python, consiglierei semplicemente di installare il proprio Python locale con pyenv + virtualenv, che aggirerebbe anche questo bug di Ubuntu: Come posso installare una versione di Python diversa usando apt-get?


1
Quindi funziona, ma non posso essere l'unico a scuotere la testa qui. Dov'è il guasto? Perché l'aggiornamento del pip predefinito non riesce a configurare il nuovo pip in modo che continui a funzionare?
Steven Lu,

@StevenLu la mia comprensione è che /usr/bin/pipè fornita da un pacchetto Ubuntu Python e pipnon lo sovrascrive. Ma pip updateè gestito da pipsolo ed evita di toccare i file Ubuntu.
Ciro Santilli 19 改造 中心 法轮功 六四 事件

Ciao ho la stessa esperienza qui. Pip3 NON funzionerebbe, non importa quello che ho fatto. Questa soluzione funziona, ma come mai ?? Lo script pip Python è preparato da Debian- Il commento dice: 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. Forse c'è un modo per installare correttamente Python in modo Python.
sarà il

@will non sono sicuro di quel commento di documentazione, ma sono sicuro di cosa /usr/bin/pipfaccia il codice :-)
Ciro Santilli 10 改造 中心 法轮功 六四 事件

20

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 questo:

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

Questo stile di soluzione non sembra raccomandato dal pipteam.
jdk1.0,

Mi hai salvato la giornata !!
Saurabh Singh,

8

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

Questo ha declassato la mia versione di pip3 dalla 19.0.3 alla 8.1.1, ma ha risolto il problema.
Hawkeye Parker il

6

Mentre karel potrebbe aver risolto il tuo problema di "installazione intorpidito e scipy", ciò che è sbagliato con pip sul tuo sistema non è stato risolto, quindi probabilmente avrai più problemi con pip andando avanti.

Guardando qui , sembra essere un problema recente abbastanza comune con pip 10 su sistemi Ubuntu. Potresti trovare alcune soluzioni alternative su quel thread che funzionano per te, ma speriamo che un aggiornamento lo risolva presto.


Grazie per aver effettivamente risolto il problema e non aver dato una soluzione che risolva solo parzialmente il problema e per una sola persona ...
Caleb Fenton

2

L'installazione di pip sia da apt che da pip stesso può causare questo.

Nel mio caso, ho usato il pacchetto pip di Ubuntu per installare pipenv che quindi ha installato una copia più recente di pip. Ora poiché la mia shell esegue lo script pip 9 di Ubuntu (per verificare l'esecuzione which pip3) e il mio interprete Python importa quindi il modulo pip 10, il comando pip3 non riesce. Quindi voglio disinstallare uno dei due.

È giusto presumere che tu abbia il pip più recente per un motivo. In tal caso, si desidera disinstallare il pip precedente in questo modo:

sudo apt remove python3-pip

Se sai per certo che stai bene con il pip precedente e preferisci il pacchetto di sistema, ti consigliamo di disinstallare quello più recente:

~/.local/bin/pip3 uninstall pip

o in mancanza

sudo /usr/local/bin/pip3 uninstall pip


1

genere

hash -d pip3

Questo dovrebbe rimuovere questo errore


3
Potresti dare ulteriori spiegazioni sulla tua risposta: cos'è "hash" e perché rimuoverà l'errore?
Marc Vanhoomissen,

1

Forza la reinstallazione di pip funziona bene per la maggior parte degli utenti, come mostrato in questa pagina di github:

python -m pip install --force-reinstall pip

grazie. Tutte le risposte precedenti sono fallite miseramente, mentre le tue hanno funzionato
Pynchia il

0

Il mio problema è finito per essere una mancata corrispondenza tra python3.6 e 3.7. L'installazione di python3.6 ha inserito un collegamento /usr/bin/python3 -> /usr/bin/python3.6anche se il sistema è stato aggiornato a 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

-1

Questo ha funzionato per me:

pip install --upgrade --user pip

Con install --upgrade, intendo dire qualsiasi cosa tu stia cercando di installare.

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.