installazione pip /usr/local/opt/python/bin/python2.7: interprete errato: nessun file o directory di questo tipo


94

Non so qual è il problema, ma sono bloccato a seguire alcune soluzioni di stackoverflow che non arrivano da nessuna parte. Puoi aiutarmi per favore su questo?

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

Risposte:


171

Avevo usato home-brew per installare 2.7 su OS X 10.10 e nella nuova installazione mancavano i collegamenti simbolici. Ho corso

brew link --overwrite python

come accennato in Come collegare simbolicamente Python in Homebrew? e ha risolto il problema.


6
Questo mi ha salvato. FWIW, ho dovuto fare tre passaggi per riparare il mio Python su El Capitan: brew install python; brew linkapps python; brew link - sovrascrivi python
Saish

come fare il contrario di quello?
bubakazouba

3
inverso: brew unlink python
Anders B

1
Solo per aggiungere a questo. Ho scoperto che dovevo eseguire "xcode-select --install" per qualsiasi motivo. "brew reinstall python" non avrebbe funzionato finché non l'avessi fatto. Nel mio caso particolare, ho utilizzato l'assistente per la migrazione per passare da un computer fisico all'altro. Dopo queste due cose, tutto è stato risolto e pip3 ha funzionato.
chrisallick

2
Python era già collegato correttamente per me, ciò che ha aiutato è stato pip3 install --upgrade pipsottolineato da @Excalibur in un commento più in basso.
retrovertigo

58

Immagino che tu abbia due installazioni python o due installazioni pip, una delle quali è stata parzialmente rimossa.

Perché lo usi sudo? Idealmente dovresti essere in grado di installare ed eseguire tutto dal tuo account utente invece di usare root. Se mischi insieme root e il tuo account locale, è più probabile che tu incorra in problemi di permessi (ad esempio, vedi l'avvertimento che dà riguardo "la directory principale non è di proprietà dell'utente corrente").

Cosa ottieni se lo esegui?

$ head -n1 /usr/local/bin/pip

Questo ti mostrerà quale binario Python pipsta cercando di usare. Se punta /usr/local/opt/python/bin/python2.7, prova a eseguire questo:

$ ls -al /usr/local/opt/python/bin/python2.7

Se questo dice "Nessun file o directory di questo tipo", pip sta tentando di utilizzare un binario Python che è stato rimosso.

Quindi, prova questo:

$ which python
$ which python2.7

Per vedere il percorso del binario Python che sta effettivamente funzionando.

Poiché sembra che pip sia stato installato con successo da qualche parte, potrebbe essere /usr/local/bin/pipparte di un'installazione precedente di pip che si trova più in alto nel file PATH. Per verificarlo, puoi provare a spostare il pipbinario non funzionante in questo modo (potrebbe richiedere sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

Quindi prova a eseguire di pip --versionnuovo il comando. Si spera che prenda la versione corretta e funzioni correttamente.


ottime spiegazioni. Nota a margine: dover eseguire il debug del gestore di pacchetti di un linguaggio installato per ottenere un progetto da Mercurial è ciò che mi fa perdere la fiducia in tutte quelle cose del computer. oops .. E ora per un nuovo errore Python "AttributeError local repository"
nicolas

1
Ho lo stesso problema, ma questo non ha funzionato per me, anche dopo aver seguito queste istruzioni. PIP sta ancora utilizzando un percorso errato. C'è un altro modo per farlo?
Adam Starrh

5
Ho dovuto installare pip: sudo /usr/bin/easy_install pip- trovato qui: stackoverflow.com/questions/27308234/...
Adam Starrh

Il problema è che se questa è l'unica versione di pip installata, allora sei sfortunato
einarc

55

Unica soluzione in OSX e la sua variante.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7

1
Ho cercato di presentare la risposta in modo semplice e senza interruzioni.
TheExorcist

È probabile che ciò abbia effetti collaterali su altri programmi che utilizzano Python. Inoltre, la fine del ciclo di vita di Python 2 è il 1 ° gennaio 2020 ei suoi sviluppatori hanno indicato che alla fine (o in alcuni ambienti, già) "python" senza modificatori dovrebbe fare riferimento a Python 3 python.org/dev/peps / pep-0394
kotoole

@kotoole Dalla tua risposta sembra che i tuoi occhi possano vedere, ma non riescono a osservare, basta sostituire il python2.7 con python3.x funzionerà ancora allo stesso modo.
TheExorcist

1
@TheExorcist purtroppo per tutti noi, Python2 e Python3 sono linguaggi diversi. Il codice scritto per una lingua si interromperà se eseguito nell'altra. La sostituzione di python con python2.7 all'ingrosso sembra altamente probabile che rompa altre applicazioni lungo la strada. Questa soluzione "funziona" nello stesso modo in cui funziona l'eliminazione della porta di casa quando hai dimenticato le chiavi. Ti fa passare, ma non venire a piangere quando la tua casa inizia a riempirsi di insetti.
kotoole

@kotoole offcourse, hai ragione, ma a volte dobbiamo fare quello che dobbiamo fare al momento.
TheExorcist

34

Fissaggio pip

Per questo errore:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La fonte di questo problema è un percorso python errato codificato in pip (il che significa che non verrà risolto, ad esempio, modificando $ PATH). Quel percorso non è più hardcoded nell'ultima versione di pip, quindi una soluzione che dovrebbe funzionare è:

pip install --upgrade pip

Ma ovviamente questo comando usa pip, quindi fallisce con lo stesso errore.

Il modo per tirarti fuori da questo casino:

  1. Correre which pip
  2. Apri quel file in un editor di testo
  3. Cambia la prima riga da #!/usr/local/opt/python/bin/python2.7a es#!/usr/local/opt/python2/bin/python2.7 (nota il python2 nel percorso), o qualsiasi percorso a un interprete Python funzionante sulla tua macchina.
  4. Ora, pip install --upgrade pip(questo sovrascrive il tuo hack e fa funzionare pip all'ultima versione, dove il problema dell'interprete dovrebbe essere risolto)

Correzione di virtualenv

Per me, ho trovato questo problema avendo prima lo stesso problema da virtualenv:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La soluzione qui è correre

pip uninstall virtualenv
pip install virtualenv

Se l'esecuzione di quel comando dà lo stesso errore da pip, vedi sopra.


1
Sì, avendo avuto Python 2.7 e 3.6 su Mac OSX, quindi l'aggiornamento a 3.6, ho avuto questo problema. Questa è stata la soluzione che ha funzionato per me ( pip3 install --upgrade pip)
Excalibur

No: pip Traceback (l'ultima chiamata più recente): File "/ usr / local / bin / pip", riga 7, in <module> da pip._internal import main ImportError: Nessun modulo denominato pip._internal
einarc

@Excalibur ho aggiunto la tua soluzione come commento sotto la risposta accettata. Grazie per quello!
retrovertigo

26

Ho fatto lo stesso errore usando sudo per la mia installazione. (oops)

brew install python
brew linkapps python
brew link --overwrite python 

Questo ha riportato tutto alla normalità.


22
linkapps è deprecato
Steve

15

Poiché avevo installato sia Python 2 che 3 su Mac OSX, avevo tutti i tipi di errori.

Ho usato quale trovare la posizione del mio file python2.7 (/usr/local/bin/python2.7)

which python2.7

Quindi ho collegato il mio vero percorso di installazione di python2.7 con quello previsto dallo script:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7

2
Salvavita! Grazie.
Brian Fegter

13

Ho avuto un problema simile. Fondamentalmente pip stava cercando in un percorso sbagliato (vecchio percorso di installazione) o python. La seguente soluzione ha funzionato per me:

  • Ho controllato dove si trova il percorso di Python (prova which python)
  • Ho controllato la prima riga sul file pip ( /usr/local/bin/pip2.7e /usr/local/bin/pip). La riga dovrebbe indicare il percorso corretto del percorso python. Nel mio caso, no. L'ho corretto e ora funziona bene.

9

Nel caso in cui aiuti qualcuno, la soluzione menzionata in quest'altra domanda ha funzionato per me quando pip ha smesso di funzionare oggi dopo averlo aggiornato: Pip rotto dopo l'aggiornamento

Sembra che sia un problema quando una posizione precedentemente memorizzata nella cache cambia, quindi puoi aggiornare la cache con questo comando:

hash -r

9

Per semplificare il funzionamento, possiamo utilizzare il comando seguente per reinstallare la versione 2:

brew install python@2

Quindi sul mio Mac, sembra come di seguito:

▶ python -V
Python 2.7.10

▶ python2 -V
Python 2.7.14

▶ python3 -V
Python 3.6.5

▶ pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

▶ pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

▶ pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

1
Per la reinstallazione c'è il reinstallcomando in brew:brew reinstall python@2
Valeriy Van

5

Ho avuto lo stesso problema, virtualenv puntava a un vecchio percorso di Python. La correzione del percorso ha risolto il problema:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.

Questo ha funzionato. Ma è una soluzione a lungo termine? Ho notato questo problema con un paio di altre cose, quindi sarebbe necessario cambiarlo ogni volta che non funziona più e sono preoccupato per gli effetti a lungo termine di questo.
Jake T.

Sicuramente non una soluzione a lungo termine. Nel mio caso avevo perso il controllo con il mio ambiente Python, motivo per cui penso che sia entrato in questa situazione e abbia cercato una soluzione rapida. Sospetto che disinstallare virtualenv e reinstallarlo con un pip python2.7 funzionante renderebbe questo stick.
dg

4

Ho avuto lo stesso problema. Ho installato sia Python 2.7 che 3.6. Python 2.7 virtualenvfunzionava, ma dopo aver installato Python3, virtualenv continuava a cercare la versione 2.7 e non riusciva a trovarla. Farepip install virtualenv installata la versione Python3 di virtualenv.

Quindi, per ogni comando, se voglio usare Python2, userei virtualenv --python=python2.7 somecommand


2

Ho lo stesso problema. Se corro brew link --overwrite python2. C'era ancora zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory.

cd /usr/local/opt/
mv python2 python

Risolto! Ora possiamo usare la versione fabric di python2.

=== 2018/07/25 aggiornato

C'è un modo conveniente per usare la versione fab di python2 quando il tuo sistema operativo python è collegato a python3. .shper il tuo comando.

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

Spero che sia di aiuto.


2

La modifica della prima riga di questo file ha funzionato:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

prima

#!/usr/local/opt/python/bin/python3.7

dopo

#!/usr/local/Cellar/python/3.7.3/bin/python3

2

Tutto quello che devi fare è ... chiudere la finestra del terminale e riaprirne una nuova per risolvere questo problema.

Il problema è che il nuovo percorso python non viene aggiunto a bashrc (aiuterebbe sia la sorgente che la nuova finestra del terminale).


1

Nel mio caso, ho deciso di rimuovere l'installazione homebrew di Python dal mio Mac poiché avevo già altre due versioni di Python installate sul mio Mac tramite MacPorts. Ciò ha causato il messaggio di errore.

La reinstallazione di Python tramite brew ha risolto il mio problema.


1
sudo /usr/bin/easy_install pip

questo comando ha funzionato per me


1

Per me, su centOS 7 ho dovuto rimuovere il vecchio collegamento pip da / bin by

rm /bin/pip2.7 
rm /bin/pip

quindi ricollegalo con

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

Allora se

/usr/local/bin/pip2.7

Funziona, dovrebbe funzionare


0

Potresti avere due diverse versioni di Python e pip.

Prova a:

pip2 install --upgrade pip e poi pip2 install -r requirements.txt

O pip3se sei su una versione più recente di Python.


0

TLDR: pip trovato nel percorso a è un collegamento simbolico e la posizione di riferimento non contiene più l'eseguibile. Devi aggiornare il collegamento simbolico.

Aiuta a capire un paio di cose.

  • Quando digiti qualcosa di simile pythono il piptuo sistema operativo /etc/pathscercherà di trovare l'eseguibile associato per quel comando. Puoi vedere tutto lì dentro usando cat /etc/paths.
  • Per determinare la posizione dell'eseguibile che la tua shell userà c'è un comodo comando which, puoi digitare which pythono which pip. Questo ti dirà la posizione dell'eseguibile che la tua shell userà per quel comando.
  • Questa parte è fondamentale . La posizione può essere o meno un eseguibile effettivo, potrebbe essere un collegamento simbolico (collegamento simbolico).
  • È comune per /etc/pathscontenere /usr/local/bin, è anche comune per /usr/local/binessere un mucchio di collegamenti simbolici agli eseguibili effettivi. Non gli eseguibili stessi.
  • Se l'eseguibile nella posizione di riferimento dei collegamenti simbolici non esiste, verrà visualizzato un errore del tipo bad interpreter: No such file or directory

Detto questo, è probabile che il problema sia pipun collegamento simbolico e l'eseguibile collegato probabilmente non esiste più in quella posizione. Per risolvere il problema, procedi come segue

  1. Trova la posizione dell'eseguibile - which pip(dà qualcosa del genere /usr/local/bin/pip)
  2. Controlla la posizione di riferimento del collegamento simbolico ls -l /usr/local/bin/pip | grep pip(dai qualcosa del genere pip -> /usr/local/opt/python@3.7/bin/pip3)
  3. Verificare se l'eseguibile esiste nella posizione di riferimento ls /usr/local/opt/python@3.7/bin/pip3 (stai riscontrando questo problema quindi probabilmente non lo è).
  4. Rimuovi il vecchio collegamento simbolico rm -r /usr/local/bin/pip
  5. Trova l' pipeseguibile effettivo se lo usi homebrewsarà in /usr/local/optpuoi usare qualcosa come ls /usr/local/opt/ | grep pythontrovarlo.
  6. Aggiungi il collegamento simbolico corretto per l'eseguibile pip. ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip
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.