J'ai un problème que Jupyter ne peut pas voir 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?
J'ai un problème que Jupyter ne peut pas voir 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?
Réponses:
Pour définir une variable env dans un notebook jupyter, utilisez simplement une %commande magique, soit %envou %set_env, par exemple, %env MY_VAR=MY_VALUEou %env MY_VAR MY_VALUE. (Utilisation%env seul pour imprimer les variables environnementales actuelles.)
Voir: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = valsur le backend: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.jsonfichier:Ma solution est utile si vous avez besoin des mêmes variables d'environnement chaque fois que vous démarrez un noyau jupyter, surtout si vous avez 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 listpour voir une liste avec les noyaux installés et où les fichiers sont stockés.python2) dans un nouveau répertoire (par exemple python2_myENV).display_namedans le nouveaukernel.json fichier.envdictionnaire définissant les variables d'environnement.Votre noyau json pourrait ressembler à ceci (je n'ai rien modifié du kernel.json installé sauf display_nameet 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_PATHqui affecte la façon dont les modules compilés (par exemple écrits en C) sont chargés. Définition de cette variable à l'aide de%set_env n'a pas fonctionné.C:\Program Files (x86)\Graphviz2.38\bin\dot.exeau chemin système existant en utilisant la technique que vous suggérez? Cela fonctionnera-t-il si je n'utilise pas de compte administrateur? J'utilise Windows 10.
sys.executablemoins qu'il ne PYTHONEXECUTABLEsoit défini au préalable, ce que vous devez définir avant l'exécution de python.
Si vous utilisez Python, vous pouvez définir vos variables d'environnement dans un .envfichier et les charger à partir d'un notebook Jupyter à l'aide de python-dotenv .
Installez python-dotenv:
pip install python-dotenv
Chargez le .envfichier dans un notebook Jupyter:
%load_ext dotenv
%dotenv
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 est bien sûr un correctif temporaire, pour en obtenir un permanent, vous devez probablement exporter les variables dans votre ~.profile, plus d'informations peuvent être trouvées ici
%env MY_VAR=MY_VALUEdevrait être la bonne réponse à cette question
Si vous avez besoin du jeu de variables avant de démarrer le notebook, la seule solution qui a fonctionné pour moi était env VARIABLE=$VARIABLE jupyter notebookavec export VARIABLE=valuein .bashrc.
Dans mon cas, tensorflow a besoin de la variable exportée pour réussir son importation dans un cahier.
Un piège que j'ai rencontré: les deux commandes suivantes sont équivalentes. Notez que le premier ne peut pas utiliser de guillemets. De manière quelque peu contre-intuitive, le fait de citer la chaîne lors de l'utilisation %env VAR ...entraînera l'inclusion des guillemets dans la valeur de la variable, ce qui n'est probablement pas ce que vous voulez.
%env MYPATH=C:/Folder Name/file.txt
et
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
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 placer dans le .profile et .bashrc (même le / etc / profile) a eu pour conséquence que l'ENV Vars n'était pas disponible dans les blocs-notes de juypter.
J'ai dû éditer:
/lib/systemd/system/jupyer-notebook.service
et mettez la variable que je voulais lire dans le fichier d'unité comme:
Environment=MYOWN_VAR=theVar
et alors seulement pourrais-je le lire à partir du cahier juypter.
Une solution connexe (à court terme) consiste à stocker vos variables d'environnement dans un seul fichier, avec un format prévisible, qui peut être obtenu lors du démarrage d'un terminal et / ou lu dans le notebook. Par exemple, j'ai un fichier,, .envqui a mes définitions de variable d'environnement au format VARIABLE_NAME=VARIABLE_VALUE(pas de lignes vides ni d'espaces supplémentaires). Vous pouvez générer ce fichier dans les fichiers .bashrcou .bash_profilelorsque vous démarrez une nouvelle session de terminal et vous pouvez le lire dans un cahier avec 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 .envfichier peut vivre n'importe où et être référencé par rapport au répertoire contenant le fichier notebook. Cela a également l'avantage de ne pas afficher les valeurs de variable dans votre code n'importe où.