Jupyter ne voit pas la variable env dans le fichier bashrc. Existe-t-il un moyen de charger ces variables dans jupyter ou d’y ajouter une variable custome?
Pour définir une variable env dans un bloc-notes jupyter, utilisez simplement une commande magique %
, soit %env
ou %set_env
, par exemple %env MY_VAR=MY_VALUE
ou %env MY_VAR MY_VALUE
. (Utilisez %env
seul pour imprimer les variables d’environnement actuelles.)
Voir: http://ipython.readthedocs.io/fr/stable/interactive/magics.html
Vous pouvez configurer les variables d’environnement dans votre code comme suit:
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')
Ceci, bien sûr, si un correctif temporaire, pour obtenir un correctif permanent, vous aurez probablement besoin d’exporter les variables dans votre ~.profile
, plus d’informations peuvent être trouvées ici
Si vous utilisez Python, vous pouvez définir vos variables d'environnement dans un fichier .env
et les charger à partir d'un carnet Jupyter à l'aide de python-dotenv .
Installez python-dotenv:
pip install python-dotenv
Chargez le fichier .env
dans un bloc-notes Jupyter:
%load_ext dotenv
%dotenv
kernel.json
:Ma solution est utile si vous avez besoin des mêmes variables d’environnement chaque fois que vous démarrez un noyau jupyter, en particulier si vous disposez de plusieurs ensembles de variables d’environnement pour différentes tâches.
Pour créer un nouveau noyau ipython avec vos variables d’environnement, procédez comme suit:
jupyter kernelspec list
pour voir une liste des noyaux installés et où les fichiers sont stockés.python2
) dans un nouveau répertoire (par exemple, python2_myENV
).display_name
dans le nouveau fichier kernel.json
.env
définissant les variables d’environnement.Votre noyau json pourrait ressembler à ceci (je n'ai rien modifié à partir du fichier kernel.json installé à l'exception de display_name
et 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
qui affecte la manière dont les modules compilés (par exemple, écrits en C) sont chargés. La définition de cette variable à l'aide de %set_env
n'a pas fonctionné.Si vous avez besoin de la variable définie avant de démarrer le bloc-notes, la seule solution qui a fonctionné pour moi était env VARIABLE=$VARIABLE jupyter notebook
avec export VARIABLE=value
dans .bashrc
.
Dans mon cas, tensorflow a besoin de la variable exportée pour réussir son importation dans un cahier.
Si vous utilisez systemd, je viens de découvrir que vous semblez devoir les ajouter au fichier d'unité systemd. Ceci sur Ubuntu 16. Les mettre dans les fichiers .profile et .bashrc (même le fichier/etc/profile) empêchait ENV Vars de se trouver dans les cahiers juypter.
Je devais éditer:
/lib/systemd/system/jupyer-notebook.service
et mettre dans la variable que je voulais lire dans le fichier unité comme:
Environment=MYOWN_VAR=theVar
et alors seulement je pourrais le lire depuis le cahier juypter.
Un piège que j'ai rencontré: Les deux commandes suivantes sont équivalentes. Notez le premier ne peut pas utiliser les guillemets. De manière quelque peu contre-intuitive, le fait de citer la chaîne lors de l'utilisation de %env VAR ...
entraîne l'inclusion des guillemets dans la valeur de la variable, ce qui n'est probablement pas ce que vous souhaitez.
%env MYPATH=C:/Folder Name/file.txt
et
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
Une solution connexe (à court terme) consiste à stocker vos variables d’environnement dans un seul fichier, au format prévisible, pouvant être recherché lors du démarrage d’un terminal et/ou lu dans le bloc-notes. Par exemple, j'ai un fichier, .env
, qui contient les définitions de variable d'environnement au format VARIABLE_NAME=VARIABLE_VALUE
(pas de lignes vierges ni d'espaces supplémentaires). Vous pouvez utiliser ce fichier dans les fichiers .bashrc
ou .bash_profile
lorsque vous démarrez une nouvelle session de terminal et vous pouvez le lire dans un cahier contenant quelque chose comme:
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
J'ai utilisé un chemin relatif pour montrer que ce fichier .env
peut vivre n'importe où et qu'il est référencé par rapport au répertoire contenant le fichier de bloc-notes. Cela présente également l'avantage de ne pas afficher les valeurs de variable dans votre code, où que vous soyez.