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 %env
ou %set_env
, par exemple, %env MY_VAR=MY_VALUE
ou %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] = val
sur le backend: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.json
fichier: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 list
pour 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_name
dans le nouveaukernel.json
fichier.env
dictionnaire définissant les variables d'environnement.Votre noyau json pourrait ressembler à ceci (je n'ai rien modifié du kernel.json installé sauf 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 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.exe
au 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.executable
moins qu'il ne PYTHONEXECUTABLE
soit 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 .env
fichier et les charger à partir d'un notebook Jupyter à l'aide de python-dotenv .
Installez python-dotenv:
pip install python-dotenv
Chargez le .env
fichier 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_VALUE
devrait ê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 notebook
avec export VARIABLE=value
in .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,, .env
qui 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 .bashrc
ou .bash_profile
lorsque 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 .env
fichier 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ù.