tablas - Ejecutando Jupyter con múltiples rutas de Python e IPython
pandas python tutorial español pdf (1)
Me gustaría trabajar con los portátiles Jupyter, pero he tenido dificultades para realizar importaciones básicas (como importar matplotlib). Creo que esto se debió a que tengo varias instalaciones de Python administradas por usuarios. Por ejemplo:
> which -a python
/usr/bin/python
/usr/local/bin/python
> which -a ipython
/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
/usr/local/bin/ipython
> which -a jupyter
/Library/Frameworks/Python.framework/Versions/3.5/bin/jupyter
/usr/local/bin/jupyter
Solía tener anaconda, pero lo eliminé del directorio ~ / anaconda. Ahora, cuando comienzo un cuaderno Jupyter, recibo un error de kernel:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py",
line 947, in init restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py",
line 1551, in _execute_child raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2]
No such file or directory: ''/Users/npr1/anaconda/envs/py27/bin/python''
¡¿Qué tengo que hacer?!
Esto es bastante sencillo de solucionar, pero implica comprender tres conceptos diferentes:
- Cómo Unix / Linux / OSX usa
$PATH
para encontrar ejecutables (%PATH%
en Windows) - Cómo Python instala y encuentra paquetes
- Cómo Jupyter sabe qué usar Python
En aras de la integridad, intentaré hacer un ELI5 rápido en cada uno de estos, para que sepa cómo resolver este problema de la mejor manera para usted.
1. Unix / Linux / OSX $ PATH
Cuando escribe cualquier comando en el indicador de comandos (por ejemplo, python
), el sistema tiene una secuencia bien definida de lugares que busca el ejecutable. Esta secuencia se define en una variable del sistema llamada PATH
, que el usuario puede especificar. Para ver su PATH
, puede escribir echo $PATH
.
El resultado es una lista de directorios en su computadora, que se buscarán para el ejecutable deseado. De su salida anterior, asumo que contiene esto:
$ echo $PATH
/usr/bin/:/Library/Frameworks/Python.framework/Versions/3.5/bin/:/usr/local/bin/
En windows echo %path%
Probablemente con algunos otros caminos intercalados también. Lo que esto significa es que cuando escriba python
, el sistema irá a /usr/bin/python
. Cuando escriba ipython
, en este ejemplo, el sistema irá a /Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
, porque no hay ipython
en /usr/bin/
.
Siempre es importante saber qué ejecutable está utilizando, especialmente cuando tiene tantas instalaciones del mismo programa en su sistema. Cambiar el camino no es demasiado complicado; Ver, por ejemplo, ¿Cómo establecer permanentemente $ PATH en Linux? .
Windows - Cómo establecer variables de entorno en Windows 10
2. Cómo Python encuentra paquetes
Cuando ejecutas Python y haces algo como import matplotlib
, Python tiene que jugar un juego similar para encontrar el paquete que tienes en mente. Similar a $PATH
en unix, Python tiene sys.path
que especifica estos:
$ python
>>> import sys
>>> sys.path
['''',
''/Users/jakevdp/anaconda/lib/python3.5'',
''/Users/jakevdp/anaconda/lib/python3.5/site-packages'',
...]
Algunas cosas importantes: de forma predeterminada, la primera entrada en sys.path
es el directorio actual. Además, a menos que modifique esto (lo que no debería hacer a menos que sepa exactamente lo que está haciendo), por lo general encontrará algo llamado site-packages
en la ruta: este es el lugar predeterminado donde Python coloca los paquetes cuando los instala. usando python setup.py install
, o pip
, o conda
, o un medio similar.
Lo importante a tener en cuenta es que cada instalación de Python tiene sus propios paquetes de sitio , donde se instalan paquetes para esa versión específica de Python . En otras palabras, si instala algo para, por ejemplo, /usr/bin/python
, entonces ~/anaconda/bin/python
no puede usar ese paquete , ¡porque se instaló en un Python diferente! Por eso, en nuestro intercambio de twitter, le recomendé que se centrase en una instalación de Python y corrija su $PATH
para que solo use la que desea usar.
Hay otro componente para esto: algunos paquetes de Python vienen con scripts independientes que puede ejecutar desde la línea de comandos (los ejemplos son pip
, ipython
, jupyter
, pep8
, etc.) De manera predeterminada, estos ejecutables se colocarán en el mismo directorio. La ruta como Python solía instalarlos, y está diseñada para funcionar solo con esa instalación de Python .
Eso significa que, como su sistema está configurado, cuando ejecuta python
, obtiene /usr/bin/python
, pero cuando ejecuta ipython
, obtiene /Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
que está asociada con la versión de Python en /Library/Frameworks/Python.framework/Versions/3.5/bin/python
! Además, esto significa que los paquetes que puede importar cuando ejecuta python
están completamente separados de los paquetes que puede importar cuando ejecuta ipython
o un cuaderno Jupyter: está utilizando dos instalaciones de Python completamente independientes.
Entonces, ¿cómo solucionar esto? Bueno, primero asegúrese de que su variable $PATH
esté haciendo lo que usted quiere. Es probable que tenga un script de inicio llamado algo como ~/.bash_profile
o ~/.bashrc
que establezca esta variable $PATH
. En Windows, puede modificar las variables de entorno específicas del usuario. Puede modificarlo manualmente si desea que su sistema busque cosas en un orden diferente. Cuando instale anaconda / miniconda por primera vez, habrá una opción para hacer esto automáticamente (agregar Python al PATH): diga sí, y luego python
siempre apuntará a ~/anaconda/python
, que es probablemente lo que quiere.
3. Cómo Jupyter sabe qué usar Python
Todavía no estamos totalmente fuera del agua. Mencionó que en el cuaderno de Jupyter, está recibiendo un error del kernel: esto indica que Jupyter está buscando una versión de Python inexistente.
Jupyter está configurado para poder utilizar una amplia gama de "núcleos" o motores de ejecución para el código. Estos pueden ser Python 2, Python 3, R, Julia, Ruby ... hay docenas de núcleos posibles para usar. Pero para que esto suceda, Jupyter necesita saber dónde buscar el ejecutable asociado: es decir, necesita saber en qué ruta se encuentra el python
.
Estas rutas se especifican en el kernelspec de kernelspec
, y es posible que el usuario las ajuste a sus deseos. Por ejemplo, aquí está la lista de núcleos que tengo en mi sistema:
$ jupyter kernelspec list
Available kernels:
python2.7 /Users/jakevdp/.ipython/kernels/python2.7
python3.3 /Users/jakevdp/.ipython/kernels/python3.3
python3.4 /Users/jakevdp/.ipython/kernels/python3.4
python3.5 /Users/jakevdp/.ipython/kernels/python3.5
python2 /Users/jakevdp/Library/Jupyter/kernels/python2
python3 /Users/jakevdp/Library/Jupyter/kernels/python3
Cada uno de estos es un directorio que contiene algunos metadatos que especifican el nombre del kernel, la ruta al ejecutable y otra información relevante.
Puede ajustar los núcleos manualmente, editando los metadatos dentro de los directorios enumerados anteriormente.
El comando para instalar un kernel puede cambiar dependiendo del kernel. IPython se basa en el paquete ipykernel que contiene un comando para instalar un kernel de Python: por ejemplo
$ python -m ipykernel install
Creará un kernelspec asociado con el ejecutable de Python que usas para ejecutar este comando. Luego puedes elegir este kernel en el cuaderno de Jupyter para ejecutar tu código con ese Python.
Puede ver otras opciones que proporciona ipykernel usando el comando de ayuda:
$ python -m ipykernel install --help
usage: ipython-kernel-install [-h] [--user] [--name NAME]
[--display-name DISPLAY_NAME] [--prefix PREFIX]
[--sys-prefix]
Install the IPython kernel spec.
optional arguments:
-h, --help show this help message and exit
--user Install for the current user instead of system-wide
--name NAME Specify a name for the kernelspec. This is needed to
have multiple IPython kernels at the same time.
--display-name DISPLAY_NAME
Specify the display name for the kernelspec. This is
helpful when you have multiple IPython kernels.
--prefix PREFIX Specify an install prefix for the kernelspec. This is
needed to install into a non-default location, such as
a conda/virtual-env.
--sys-prefix Install to Python''s sys.prefix. Shorthand for
--prefix=''/Users/bussonniermatthias/anaconda''. For use
in conda/virtual-envs.
Nota: la versión reciente de anaconda se envía con una extensión para el portátil que debería detectar automáticamente sus diversos entornos de conda si el paquete ipykernel
está instalado en él.
Resumen: arreglando su problema
Así que con ese fondo, su problema es bastante fácil de solucionar:
Establezca su
PATH
para que la versión de Python deseada sea la primera. Por ejemplo, puede ejecutarexport PATH="/path/to/python/bin:$PATH"
para especificar (una vez) qué Python le gustaría usar. Para hacer esto de forma permanente, agregue esa línea a su.bash_profile
/.bashrc
(tenga en cuenta que anaconda puede hacer esto automáticamente cuando lo instale). Recomiendo usar el Python que viene con anaconda o miniconda: esto te permitiráconda install
todas las herramientas que necesites.Asegúrese de que los paquetes que desea usar estén instalados para ese python. Si está utilizando conda, puede escribir, por ejemplo,
conda install jupyter matplotlib scikit-learn
para instalar esos paquetes paraanaconda/bin/python
.Asegúrese de que sus núcleos Jupyter apunten a las versiones de Python que desea usar. Cuando
conda install jupyter
, debe configurarlo paraanaconda/bin/python
automáticamente. De lo contrario, puede usar el comandojupyter kernelspec
o el comando de instalaciónpython -m ipykernel install
para ajustar los núcleos existentes o instalar nuevos.Para instalar módulos en otros kernels de Python Jupyter no administrados por Anaconda, necesita copiar la ruta al ejecutable de Python para el kernel y ejecutar
/path/to/python -m pip install <package>
Esperemos que eso quede claro ... ¡buena suerte!