python bash environment-variables jupyter-notebook

python - Cómo configurar la variable env en el cuaderno Jupyter



bash environment-variables (8)

Tengo un problema que Jupyter no puede ver la variable env en el archivo bashrc, ¿hay alguna forma de cargar estas variables en jupyter o agregarle una variable custome?


También puede establecer las variables en su archivo kernel.json :

Mi solución es útil si necesita las mismas variables de entorno cada vez que inicia un kernel Jupyter, especialmente si tiene varios conjuntos de variables de entorno para diferentes tareas.

Para crear un nuevo kernel ipython con sus variables de entorno, haga lo siguiente:

  • Lea la documentación en https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs
  • Ejecute la jupyter kernelspec list para ver una lista con los kernels instalados y dónde se almacenan los archivos.
  • Copie el directorio que contiene el kernel.json (por ejemplo, llamado python2 ) en un nuevo directorio (por ejemplo, python2_myENV ).
  • Cambie el nombre para display_name en el nuevo archivo kernel.json .
  • Agregar un diccionario env definiendo las variables de entorno.

Su kernel json podría tener este aspecto (no modifiqué nada del kernel.json instalado, excepto display_name y env ):

{ "display_name": "Python 2 with environment", "language": "python", "argv": [ "/usr/bin/python2", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "env": {"LD_LIBRARY_PATH":""} }

Casos de uso y ventajas de este enfoque.

  • En mi caso de uso, quise establecer la variable LD_LIBRARY_PATH que afecta a cómo se cargan los módulos compilados (por ejemplo, escritos en C). Configurar esta variable usando %set_env no funcionó.
  • Puedo tener múltiples núcleos de python con diferentes entornos.
  • Para cambiar el entorno, solo tengo que cambiar / reiniciar el kernel, pero no tengo que reiniciar la instancia jupyter (útil, si no quiero perder las variables en otro cuaderno). Consulte -hay ejemplo - https://github.com/jupyter/notebook/issues/2647

A gotcha me encontré con: Los siguientes dos comandos son equivalentes. Tenga en cuenta que el primero no puede usar comillas. De manera contraintuitiva, al citar la cadena cuando se usa %env VAR ... las comillas se incluirán como parte del valor de la variable, que probablemente no sea lo que desea.

%env MYPATH=C:/Folder Name/file.txt

y

import os os.environ[''MYPATH''] = "C:/Folder Name/file.txt"


Puede configurar las variables de entorno en su código de la siguiente manera:

import sys,os,os.path sys.path.append(os.path.expanduser(''~/code/eol_hsrl_python'')) os.environ[''HSRL_INSTRUMENT'']=''gvhsrl'' os.environ[''HSRL_CONFIG'']=os.path.expanduser(''~/hsrl_config'')

Esto, si por supuesto es una solución temporal, para obtener una permanente, probablemente necesite exportar las variables a su ~.profile Puede encontrar más información here


Si está usando systemd, acabo de descubrir que parece que tiene que agregarlos al archivo de la unidad systemd. Esto está en Ubuntu 16. Al ponerlos en .profile y .bashrc (incluso en / etc / profile), los ENV Vars no estaban disponibles en los cuadernos juypter.

Tuve que editar:

/lib/systemd/system/jupyer-notebook.service

y poner en la variable que quería leer en el archivo de la unidad como:

Environment=MYOWN_VAR=theVar

Y solo entonces pude leerlo desde el cuaderno juypter.


Si está utilizando Python, puede definir sus variables de entorno en un archivo .env y cargarlas desde un cuaderno Jupyter usando python-dotenv .

Instala python-dotenv:

pip install python-dotenv

Cargue el archivo .env en un cuaderno Jupyter:

%load_ext dotenv %dotenv


Si necesita configurar la variable antes de iniciar el cuaderno, la única solución que funcionó para mí fue env VARIABLE=$VARIABLE jupyter notebook con export VARIABLE=value en .bashrc .

En mi caso, tensorflow necesita la variable exportada para importarla con éxito en un cuaderno.


Una solución relacionada (a corto plazo) es almacenar sus variables de entorno en un solo archivo, con un formato predecible, que puede obtenerse al iniciar un terminal y / o leer en el cuaderno. Por ejemplo, tengo un archivo, .env , que tiene mis definiciones de variables de entorno en el formato VARIABLE_NAME=VARIABLE_VALUE (sin líneas en blanco ni espacios adicionales). Puede obtener este archivo en los archivos .bashrc o .bash_profile al comenzar una nueva sesión de terminal y puede leer esto en un cuaderno con algo como:

import os env_vars = !cat ../script/.env for var in env_vars: key, value = var.split(''='') os.environ[key] = value

Utilicé una ruta relativa para mostrar que este archivo .env puede vivir en cualquier lugar y hacer referencia al directorio que contiene el archivo del cuaderno. Esto también tiene la ventaja de no mostrar los valores variables dentro de su código en ningún lugar.


Para establecer una variable env en un cuaderno jupyter, solo use los comandos % magic, ya sea %env o %set_env , por ejemplo, %env MY_VAR=MY_VALUE o %env MY_VAR MY_VALUE . (Utilice %env por sí mismo para imprimir las variables de entorno actuales).

Consulte: http://ipython.readthedocs.io/en/stable/interactive/magics.html