Tengo un problema de que Jupyter no puede ver la variable env en el archivo bashrc, ¿hay alguna manera de cargar estas variables en jupyter o agregarle una variable personalizada?
Tengo un problema de que Jupyter no puede ver la variable env en el archivo bashrc, ¿hay alguna manera de cargar estas variables en jupyter o agregarle una variable personalizada?
Respuestas:
Para configurar una variable env en un cuaderno jupyter, simplemente use %
comandos mágicos, %env
o %set_env
, por ejemplo, %env MY_VAR=MY_VALUE
o %env MY_VAR MY_VALUE
. (Úselo %env
solo para imprimir las variables ambientales actuales).
Ver: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = val
en el backend: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.json
archivo:Mi solución es útil si necesita las mismas variables de entorno cada vez que inicia un kernel de jupyter, especialmente si tiene varios conjuntos de variables de entorno para diferentes tareas.
Para crear un nuevo kernel de ipython con sus variables de entorno, haga lo siguiente:
jupyter kernelspec list
para ver una lista con los núcleos instalados y dónde se almacenan los archivos.python2
) a un nuevo directorio (por ejemplo python2_myENV
).display_name
en el nuevo kernel.json
archivo.env
diccionario que defina las variables de entorno.Su kernel json podría verse así (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":""}
}
LD_LIBRARY_PATH
que afecta cómo se cargan los módulos compilados (por ejemplo, escritos en C). Establecer esta variable usando %set_env
no funcionó.C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
a la ruta del sistema existente utilizando la técnica sugerida? ¿Funcionará si no estoy usando una cuenta de administrador? Estoy usando Windows 10.
sys.executable
menos que PYTHONEXECUTABLE
se configure de antemano, que debe configurar antes de que se ejecute Python.
Si está utilizando Python, puede definir sus variables de entorno en un .env
archivo y cargarlas desde un cuaderno de Jupyter usando python-dotenv .
Instale python-dotenv:
pip install python-dotenv
Cargue el .env
archivo en un cuaderno de Jupyter:
%load_ext dotenv
%dotenv
Puede configurar 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, por supuesto, es una solución temporal, para obtener una permanente, probablemente necesite exportar las variables a su ~.profile
, se puede encontrar más información aquí
%env MY_VAR=MY_VALUE
debería ser la respuesta correcta a esta pregunta
Si necesita la variable de set antes de que esté comenzando el bloc de notas, 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.
Un problema con el que me encontré: los siguientes dos comandos son equivalentes. Tenga en cuenta que el primero no puede usar comillas. Algo contrario a la intuición, citar la cadena cuando se usa %env VAR ...
dará como resultado que las comillas se incluyan 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"
Si está utilizando systemd, acabo de descubrir que parece que tiene que agregarlos al archivo de unidad systemd. Esto en Ubuntu 16. Ponerlos en .profile y .bashrc (incluso en / etc / profile) resultó en que las Vars ENV no estuvieran disponibles en los cuadernos juypter.
Tuve que editar:
/lib/systemd/system/jupyer-notebook.service
y poner la variable que quería leer en el archivo de la unidad como:
Environment=MYOWN_VAR=theVar
y solo entonces pude leerlo desde dentro de mi cuaderno.
Una solución relacionada (a corto plazo) es almacenar sus variables de entorno en un solo archivo, con un formato predecible, que se puede obtener al iniciar una 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 leerlo 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 .env
archivo puede vivir en cualquier lugar y ser referenciado en relación con el directorio que contiene el archivo del cuaderno. Esto también tiene la ventaja de no mostrar los valores de las variables dentro de su código en ninguna parte.