ipython lee la versión incorrecta de Python

103

He tenido problemas con Python, iPython y las bibliotecas. Los siguientes puntos muestran la cadena de la problemática. Estoy ejecutando Python 2.7 en Mac Lion.

  1. iPython no lee las bibliotecas de scipy, matplotlib, pero lee numpy.
  2. Para solucionar esto, intenté instalar la versión del código fuente de Python, y solo me dio más problemas ya que ahora tengo dos versiones diferentes: 2.7.1 y 2.7.2
  3. Noté que al ejecutar Python, usa la versión 2.7.2 e importa scipy, matplotlib y numpy, pero en iPython la versión es 2.7.1, que no abre scipy o matplotlib.

Probé varias cosas que encontré en otras publicaciones de blog. Pero ninguno de ellos me ha ayudado y, además, desafortunadamente, no sé muy bien qué estoy haciendo con algunos de ellos. Por ejemplo: intenté desinstalar y reinstalar ipython con easy_install y pip. También intenté reinstalar todo a través de homebrew y modificar la ruta .bash_profile.

Diego-MX
fuente
6
La ipythonsecuencia de comandos está "vinculada" a la versión específica de Python con la que se instaló; no cambiará automáticamente a la última que instaló. Si primero instaló 2.7.1, luego IPython, luego 2.7.2 desde la fuente, su IPython seguirá usando 2.7.1. Necesita deshacer todos sus golpes, volver a su versión original de Python y averiguar cuál fue la razón detrás del punto 1; alternativamente, reinstale IPython usando cualquier instalación de Python que pueda acceder a las bibliotecas que necesita.
millimoose
¿Podrías ser más específico? ... gracias
Diego-MX
1
¿Específico sobre qué parte? ¿Cómo funciona el inicio de IPython o cómo hacer que el problema desaparezca?
millimoose
1
Básicamente, cuando instala cualquier "programa" de Python, como IPython o incluso easy_install, el script de inicio del programa está configurado para usar siempre el ejecutable de Python con el que se instaló. Entonces, si tenía Python 2.7.1 sin sus bibliotecas, y luego instala IPython, IPython se instala "en" la instalación de Python 2.7.1, y ipythonse coloca un enlace al ejecutable en su PATH. Si luego instala Python 2.7.2 desde la fuente, es una copia nueva e separada de Python, no actualizará el 2.7.1 existente que tiene IPython. Por lo tanto, IPython no verá la copia 2.7.2 ni ninguna biblioteca en ella.
millimoose
1
Las bibliotecas funcionan igual. Si ha instalado etc. numpy después de instalar Python 2.7.2 de la fuente, que probablemente fueron instalados en el directorio 2.7.2. Esto significa que la versión de Python 2.7.1 no vería esas bibliotecas en absoluto. Dado que IPython se instaló con 2.7.1, tampoco pudo ver esas bibliotecas. Básicamente, puede tener tantas copias completamente separadas de Python en su sistema como desee, pero puede ser difícil hacer un seguimiento de cuál se usa para qué. A menos que sepa lo que está haciendo, es mejor comenzar con la versión incorporada de Python y simplemente reinstalar las bibliotecas que faltan
millimoose

Respuestas:

147

Bien, solución rápida:

which python

te da /usr/bin/python, ¿verdad? Hacer

which ipython

y apuesto a que así será /usr/local/bin/ipython. Miremos adentro:

Editar 7/9/16: el archivo ahora se ve así:

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

Y el mío funciona correctamente así, pero mi situación no es exactamente como la de los OP.


Respuesta original - 30/9/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')()
    )

Ajá, abre /usr/local/bin/ipythonen tu editor (con privilegios) y cambia la primera línea a

#!/usr/local/bin/python

guardar, iniciar iPython, debería decir que está usando la versión que desea ahora.

Manuel Ebert
fuente
41
en duda, python -m IPythones equivalente a ipythonesperar que esté seguro de usar el Python correcto.
Matt
2
también recuerda cerrar la terminal y abrir una nueva. ya que el PATH es almacenado en caché por el shell para mayor eficiencia. así es como conseguí que esta solución me funcionara. ver: conda.pydata.org/docs/…
parsethis
@Mate. Yo también experimenté. Mi caso es "python -m IPython" invocará la versión correcta que quería. Pero solo 'ipython', inició una copia que usa el antiguo python2. El misterio es que si hago un "qué ipython", está apuntando a una copia virtualenv con el contenido del archivo Python aparentemente correcto.
kawingkelvin
15

Publicar el comentario de @ Matt como respuesta para que sea más visible

python -m IPython

Carga ipython como un módulo con cualquier python accesible en la ruta primero. En mi caso, tenía uno preinstalado y otro que agregué desde brew. Esto simplemente funciona perfectamente.

sh87
fuente
Quizás no sea la respuesta para esta pregunta, pero esta es la respuesta a la pregunta: "cómo ejecutar ipython con cualquier versión de Python instalada". Gracias.
Salyangoz
9

¿Qué hay de usar un virtualenv? Me gusta mucho. Quizás no sea la forma más rápida, pero creo que está muy claro.

Cuando crea un virtualenv, puede especificar la ruta de Python con el indicador -p.

para python 2.7

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

para Python 3.4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython
pvieytes
fuente
2
Este es un hilo antiguo, pero también me he encontrado con virtualenvs y me gustan agradables para desarrollar productos. Sin embargo, para el análisis "diario", prefiero tener una versión utilizable de python / ipython en mi sistema.
Diego-MX
1
python -m IPythoncomenzará ipython con la versión dada depython
Xiao
1
tenga en cuenta que python -m IPythonnecesita esto instalado:pip install ipython
Xiao
6

Primero, me aseguraría de que estés usando la pitón correcta. En un símbolo del sistema, escriba:

which python
python -V

El primero te dirá la ruta, el segundo te dice la versión de Python que estás usando.

Macduff
fuente
Bien, me da Python 2.7.2 en / usr / local / bin / python
Diego-MX
4

Mi solución es simple, estúpida pero funciona.

Uso python -Vpara asegurarme de que versión es

$ python -V
Python 2.7.10

y luego crea un alias en .bash_profile

$ vi ~/.bash_profile

Agregar una línea

alias ipython="python -m IPython"

entonces obtendrás un ipythonen Python 2.7. 🙂

(Por cierto, mi ipythonse instala a través de homebrew, por defecto se ejecutará ipython en python 3.)

$ brew install ipython
Johnny
fuente
2

extremadamente relevante: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

td; lr se encuentran problemas debido al 'hash' del shell y las variables de ruta.

parsethis
fuente
También una buena práctica general es instalar ipython en virtualenv. su which pythondebe apuntar a la binaria virtualenv pitón.
parsethis
El hash de shell me mordió, incluso después de instalar ipython dentro de virtualenv. hash -rme lo arregló; ¡Gracias!
theY4Kman
1

Un método similar usando pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Ahora mostrará la versión correcta de Python

Python 3.4.5
Avikd
fuente
1

La solución más simple que se me ocurrió, que no requiere manipular entornos, archivos instalados o cualquier otra cosa, se basa en los hechos que

  1. El ejecutable ipythones en realidad una secuencia de comandos de Python.
  2. El paquete IPython se instala por separado para cada intérprete con el que se ejecutó pip intall.

Si la versión de Python con la que está ejecutando tiene un paquete IPython instalado, puede hacerlo

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

Esto ejecutará el ipythonscript con el intérprete que desee en lugar del que aparece en el shebang.

Físico loco
fuente
En lugar de llamar a lo anterior cada vez, ¿cómo lo configuro como predeterminado, de modo que cada vez que escribo ipythonen mi shell, lea automáticamente el intérprete personalizado en lugar del predeterminado?
Srivatsan
Agregue un script que haga eso a la ruta antes de la predeterminada. Pero tienes que meterte con el medio ambiente para hacer eso.
Mad Physicist
0

Su problema es básicamente hacer que ipython use la python correcta.

entonces la solución al problema es hacer que ipython use el python correcto (que tiene las bibliotecas como scipy instaladas)

He escrito una solución aquí:

Cómo hacer que iPython use Python 2 en lugar de Python 3

Harish Kayarohanam
fuente
0

Me encontré con el mismo problema, pero la siguiente fue la única solución que funcionó para mí en OSX 12, Sierra.

ipython siempre se estaba lanzando para python 3.6 pero lo necesitaba para 2.7. No pude encontrar un script de inicio de ipython para 2.7, ni pude encontrar el módulo IPython para ejecutarlo python -m. Ninguno de brew instally ipython pip install ipythonni pip2 install ipythonpudo conseguirme la versión 2.7. Entonces lo obtuve manualmente.

brew install ipython@5instala la versión 2.7 desde aquí, pero no la pondrá $PATHporque sabe que el nombre entra en conflicto con otro paquete. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2solucionará esto y le permitirá ejecutar ipython2desde el indicador de shell

Para mí, como me tomé en serio el uso de ipython para 2.7, también ejecuté los siguientes comandos.

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
Jeremy Paige
fuente
0

Todas las respuestas mencionadas aquí no ayudan a resolver el problema si está utilizando anaconda o algún otro contenedor de entorno virtual.

Esta respuesta se basa en la suposición de que está usando anaconda.

Supongamos que está en un entorno de Python 3 y cuando crea un cuaderno en un cuaderno de jupyter, muestra "Python 2" en lugar de "Python 3".

Esto se debe a que "ipython" es esencialmente un script que se ejecuta y en este script menciona qué versión de Python está usando para ejecutar el comando. Todo lo que necesita hacer es cambiar esta línea para que ipython use la versión de Python que desea.

Primero detenga el servidor ipython y obtenga la ubicación del ejecutable de Python del entorno actual usando el comando "qué Python"

Mi salida es:

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

Ahora obtenga la ubicación ejecutable de ipython use el comando "cuál ipython"

el mio es :

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

Tenga en cuenta que está usando una versión diferente de Python, es decir. python desde un entorno específico ejecutando una versión diferente de python, es decir, ejecutando python desde un entorno diferente.

Ahora navegue hasta el directorio anaconda2 / bin (para usuarios de anaconda 3 debería ser anaconda3 / bin) y busque el archivo "ipython". en esta edición, la primera línea para apuntar a la versión actual de Python que desea. es decir, la salida de "qué python" es decir:

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

Observe que cambié mi entorno de python de py2 (ejecutando python 2.7) a py3 (ejecutando python 3.5).

Guarda el archivo. Y ejecute jupyter notebook, ahora al crear un nuevo cuaderno, la opción "Python 3" debería estar visible.

¡Salud!

100rabh
fuente