python2 notebook kernels ipykernel how delete and python virtualenv ipython

notebook - Llamar a IPython desde un virtualenv



kernel python2 jupyter (5)

(Debian / Ubuntu) suponiendo que alguna versión (x) de Python3 está instalada, entonces:

$ sudo apt-get install -y ipython $ virtualenv --python=python3.x .venv $ source .venv/bin/activate $ pip3 install ipython $ ipython3

lanzará ipython ejecutando su versión de Python3.

Entiendo que IPython no es virtualenv-aware y que la solución más lógica para esto es instalar ipython en cada virtualenv por separado usando

pip install ipython

Hasta aquí todo bien. Una cosa que noté es que si la copia de IPython de todo el sistema se llama desde un virtualenv usando $> ipython antes de que se instale IPython bajo este virtualenv, los comandos subsiguientes $> ipython continuarán mostrando la copia ipython de todo el sistema.

Por otro lado, si no se llama a ipython antes de instalarlo bajo un virtualenv $> ipython aparecerá la copia recién instalada.

¿Cuál es la explicación para esto?

También me hace preguntarme si este comportamiento significa que debería esperar algunos problemas en el camino.


Como otros mencionaron, las versiones recientes de ipython son virtualenv conscientes, por lo que puede usar su script virtualenv bin activate para ejecutar ipython usando su virtualenv, por ej.

$ source venv/bin/activate (venv) $ ipython WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.


Puede obligar a IPython a utilizar un entorno virtual, si está disponible, agregando el siguiente archivo a ~/.ipython/profile_default/startups :

import os import sys if ''VIRTUAL_ENV'' in os.environ: py_version = sys.version_info[:2] # formatted as X.Y py_infix = os.path.join(''lib'', (''python%d.%d'' % py_version)) virtual_site = os.path.join(os.environ.get(''VIRTUAL_ENV''), py_infix, ''site-packages'') dist_site = os.path.join(''/usr'', py_infix, ''dist-packages'') # OPTIONAL: exclude debian-based system distributions sites sys.path = filter(lambda p: not p.startswith(dist_site), sys.path) # add virtualenv site sys.path.insert(0, virtual_site)

Recomiendo nombrarlo 00-virtualenv.py para que los cambios se realicen lo antes posible.

Nota: asegúrese de que ipython esté instalado en el nuevo entorno virtual para que funcione.


Si está intentando abrir un bloc de notas, incluso ipython 5 no lo ayudará: ipython ignorará el virtualenv (al menos en mi máquina / configuración). Tendrá que utilizar la secuencia de comandos de rgtk, pero asegúrese de modificar la parte de filtro opcional y sys.path.insert como a continuación:

import os import sys if ''VIRTUAL_ENV'' in os.environ: py_version = sys.version_info[:2] # formatted as X.Y py_infix = os.path.join(''lib'', (''python%d.%d'' % py_version)) virtual_site = os.path.join(os.environ.get(''VIRTUAL_ENV''), py_infix, ''site-packages'') dist_site = os.path.join(''/usr'', py_infix, ''dist-packages'') # OPTIONAL: exclude debian-based system distributions sites # ADD1: sys.path must be a list sys.path = list(filter(lambda p: not p.startswith(dist_site), sys.path)) # add virtualenv site # ADD2: insert(0 is wrong and breaks conformance of sys.path sys.path.insert(1, virtual_site)


alias ipy="python -c ''import IPython; IPython.terminal.ipapp.launch_new_instance()''"

Esta es una gran manera de estar siempre seguros de que la instancia de ipython siempre pertenece a la versión python de virtualenv.

Esto funciona solo en ipython> 2.0.

Source