ipython legge la versione sbagliata di python


103

Ho avuto problemi con Python, iPython e le librerie. I punti seguenti mostrano la catena delle problematiche. Sto eseguendo Python 2.7 su Mac Lion.

  1. iPython non legge le librerie di scipy, matplotlib, ma legge numpy.
  2. Per risolvere questo problema, ho provato a installare la versione del codice sorgente di Python e mi ha dato solo più problemi poiché ora ho due versioni diverse: 2.7.1 e 2.7.2
  3. Ho notato che eseguendo Python, usa la versione 2.7.2 e importa scipy, matplotlib e numpy, ma su iPython la versione è 2.7.1 che non apre scipy o matplotlib.

Ho provato diverse cose che ho riscontrato da altri post sul blog. Ma nessuno di loro ha aiutato, e sfortunatamente non so nemmeno cosa sto facendo con alcuni di loro. Ad esempio: ho provato a disinstallare e reinstallare ipython con easy_install e pip. Ho anche provato a reinstallare tutto tramite homebrew e modificare il percorso .bash_profile.


6
Lo ipythonscript è "legato" alla versione specifica di Python con cui è stato installato - non passerà automaticamente a quella che hai installato l'ultima volta. Se hai installato prima 2.7.1, poi IPython, quindi 2.7.2 dal sorgente, il tuo IPython continuerà a utilizzare 2.7.1. Devi annullare tutte le tue agitazioni, tornare alla versione originale di Python e capire quale fosse la ragione dietro il punto 1; in alternativa, reinstalla IPython utilizzando qualsiasi installazione Python possa accedere alle librerie di cui hai bisogno.
millimoose

Potresti essere più specifico? ... grazie
Diego-MX

1
Specifico su quale parte? Come funziona l'avvio di IPython o come risolvere il problema?
millimoose

1
Essenzialmente, quando installi un qualsiasi "programma" python, come IPython o anche easy_install, lo script di avvio del programma è impostato per utilizzare sempre l'eseguibile python con cui è stato installato. Quindi, se hai Python 2.7.1 senza le tue librerie e poi installi IPython, IPython viene installato "dentro" l'installazione di Python 2.7.1 e un collegamento ipythonall'eseguibile viene posizionato sul tuo PATH. Se poi installi Python 2.7.2 dal sorgente, è una nuova copia separata di Python non aggiornerà la 2.7.1 esistente che contiene IPython. Quindi IPython non vedrà la copia 2.7.2 o alcuna libreria in essa.
millimoose

1
Le biblioteche funzionano allo stesso modo. Se hai installato numpy ecc. Dopo aver installato Python 2.7.2 dal sorgente, è probabile che siano stati installati nella directory 2.7.2. Ciò significa che la versione Python 2.7.1 non vedrebbe affatto quelle librerie. Poiché IPython è stato installato con 2.7.1, non è stato possibile vedere nemmeno quelle librerie. Fondamentalmente, puoi avere tutte le copie completamente separate di Python sul tuo sistema quante ne desideri, ma può essere difficile tenere traccia di quale viene utilizzata per cosa. A meno che tu non sappia cosa stai facendo, è meglio iniziare con la versione integrata di Python e reinstallare le librerie mancanti
millimoose

Risposte:


147

OK soluzione rapida:

which python

ti dà /usr/bin/python, vero? Fare

which ipython

e scommetto che lo sarà /usr/local/bin/ipython. Diamo un'occhiata all'interno:

Modifica 7/9/16 - Il file ora ha questo aspetto:

cat /usr/local/bin/ipython

#!/usr/bin/python

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

from IPython import start_ipython

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

E il mio funziona correttamente in questo modo, ma la mia situazione non è esattamente come quella dell'OP.


Risposta originale - 30/09/13:

cat /usr/local/bin/ipython

#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.12.1','console_scripts','ipython'
__requires__ = 'ipython==0.12.1'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('ipython==0.12.1', 'console_scripts', 'ipython')()
    )

Aha - apri /usr/local/bin/ipythonnel tuo editor (con privilegi) e cambia la prima riga in

#!/usr/local/bin/python

salva, avvia iPython, dovrebbe dire che sta usando la versione che desideri ora.


41
in dubbio, python -m IPythonè equivalente a ipython, aspettati che tu sia sicuro di usare il Python giusto.
Matt

2
ricordati anche di chiudere il terminale e aprirne uno nuovo. poiché il PATH viene memorizzato nella cache dalla shell per motivi di efficienza. è così che ho ottenuto questa soluzione che funziona per me. vedi: conda.pydata.org/docs/…
parsethis

@Opaco. Ho anche sperimentato. Il mio caso è "python -m IPython" richiamerà la versione giusta che volevo. Ma solo "ipython", ha avviato una copia che utilizza il vecchio python2. Il mistero è che se faccio un "which ipython", punta alla copia di virtualenv con quel contenuto di file python apparentemente corretto.
kawingkelvin

15

Pubblicare il commento di @ Matt come risposta solo per renderlo più visibile

python -m IPython

Carica ipython come modulo con qualsiasi cosa python sia accessibile prima sul percorso. Nel mio caso ne avevo uno preinstallato e uno aggiunto da brew. Funziona perfettamente.


Forse non è la risposta a questa domanda, ma questa è la risposta alla domanda: "come eseguire ipython con qualsiasi versione di python installata". Grazie.
Salyangoz

9

Che ne dici di usare un virtualenv? Mi piace veramente. Forse non è il modo più veloce, ma penso che sia molto chiaro.

Quando crei un virtualenv, puoi specificare il percorso di python con il flag -p.

per python 2.7

$ virtualenv -p /usr/bin/python2.7 venv2.7
$ source venv2.7/bin/activate
(venv2.7)$ pip install ipython
(venv2.7)$ ipython

per python 3.4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython

2
Questo è un vecchio thread, ma mi sono imbattuto anche in virtualenv e mi piacciono belli per lo sviluppo di prodotti. Tuttavia, ai fini dell'analisi "quotidiana", preferirei avere solo una versione utilizzabile di python / ipython nel mio sistema.
Diego-MX

1
python -m IPythonavvierà ipython con la versione data dipython
Xiao

1
nota che è python -m IPythonnecessario installare:pip install ipython
Xiao

6

Innanzitutto, mi assicurerei che tu stia usando il pitone giusto. Al prompt dei comandi digitare:

which python
python -V

Il primo ti dirà il percorso, il secondo ti dirà la versione di Python che stai utilizzando.


Va bene, mi dà Python 2.7.2 su / usr / local / bin / python
Diego-MX

4

La mia soluzione è semplice, stupida ma funziona.

Uso python -Vper essere sicuro di quale versione sia

$ python -V
Python 2.7.10

e quindi crea un alias in .bash_profile

$ vi ~/.bash_profile

Aggiungi una linea

alias ipython="python -m IPython"

quindi otterrai un ipythonin Python 2.7. 🙂

(A proposito, il mio ipythonè installato tramite homebrew, di default avrà un ipython eseguito in python 3.)

$ brew install ipython

2

estremamente rilevante: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

td; lr si verificano problemi a causa dell'hashing della shell e delle variabili di percorso.


anche una buona pratica generale è installare ipython nel virtualenv. il vostro which pythondovrebbe puntare al binario virtualenv pitone.
parsethis

L'hashing della shell mi ha colpito, anche dopo aver installato ipython all'interno di virtualenv. hash -rrisolto per me; Grazie!
theY4Kman

1

Un metodo simile che utilizza pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Ora mostrerà la versione corretta di python

Python 3.4.5

1

La soluzione più semplice in assoluto a cui potrei pensare, che non richiede di giocherellare con ambienti, file installati o qualsiasi altra cosa, si basa sui fatti che

  1. L'eseguibile ipythonè in realtà uno script Python.
  2. Il pacchetto IPython viene installato separatamente per ogni interprete con cui hai eseguito pip intall.

Se la versione di Python con cui stai eseguendo ha un pacchetto IPython installato, puoi semplicemente farlo

/path/to/desired/python $(which ipython)

Questo eseguirà lo ipythonscript con l'interprete che desideri invece di quello elencato nello schema.


Invece di richiamare quanto sopra ogni volta, come faccio a impostarlo come predefinito, in modo che ogni volta che digito ipythonnella mia shell, legga automaticamente l'interprete personalizzato invece di quello predefinito?
Srivatsan

Aggiungi uno script che lo faccia al percorso prima di quello predefinito. Ma devi pasticciare con l'ambiente per farlo.
Mad Physicist,


0

Mi sono imbattuto nello stesso problema, ma la seguente è stata l'unica soluzione che ha funzionato per me su OSX 12, Sierra.

ipython veniva sempre avviato per python 3.6 ma ne avevo bisogno per 2.7. Non sono riuscito a trovare uno script di avvio ipython per 2.7, né sono riuscito a trovare il modulo IPython da eseguire con python -m. Nessuno brew instally ipython pip install ipythono pip2 install ipythonpotrebbe farmi ottenere la versione 2.7. Quindi l'ho preso manualmente.

brew install ipython@5installa la versione 2.7 da qui ma non la metterà sul tuo $PATHperché sa che il nome è in conflitto con un altro pacchetto. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2risolverà questo problema e ti permetterà di eseguire semplicemente ipython2dal prompt della shell

Per me, poiché ero seriamente intenzionato a usare ipython per 2.7, ho anche eseguito i seguenti comandi.

ln -s /usr/local/Cellar/ipython/6.2.1/bin/ipython /usr/local/bin/ipython3
rm -f /usr/local/bin/ipython
ln -s /usr/local/bin/ipython2 /usr/local/bin/ipython

0

Tutte le risposte qui menzionate non aiutano a risolvere il problema se si utilizza anaconda o qualche altro wrapper di ambiente virtuale.

Questa risposta si basa sul presupposto che stai usando anaconda.

Supponiamo che ti trovi in ​​un ambiente python 3 e quando crei un notebook su jupyter notebook mostra "Python 2" invece di "Python 3".

Questo perché "ipython" è essenzialmente uno script che viene eseguito e in questo script indica quale versione di python sta utilizzando per eseguire il comando. Tutto quello che devi fare è cambiare questa riga per ipython per usare la versione di python che desideri.

Per prima cosa arresta il server ipython e ottieni la posizione dell'eseguibile python dell'ambiente corrente usando il comando "which python"

Il mio output è:

/home/sourabh/anaconda2/envs/py3/bin/python

Ora ottieni la posizione eseguibile di ipython usa il comando "which ipython"

il mio è :

/home/sourabh/anaconda2/envs/py2/bin/python

Si noti che sta utilizzando una versione diversa di python, ad es. python da un ambiente specifico che esegue una versione diversa di python, ovvero che esegue python da un ambiente diverso.

Ora vai alla directory anaconda2 / bin (per gli utenti di anaconda 3 dovrebbe essere anaconda3 / bin) e cerca il file "ipython". in questa modifica la prima riga deve essere indirizzata alla versione corrente di Python che desideri. cioè l'output di "quale python" cioè:

#!/home/sourabh/anaconda2/envs/py3/bin/python

Si noti che ho cambiato il mio ambiente python da py2 (con python 2.7) a py3 (con python 3.5).

Salva il file. Ed esegui jupyter notebook, ora quando crei un nuovo notebook dovrebbe essere visibile l'opzione "Python 3".

Saluti!

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.