Ich habe ein Problem, dass Jupyter die env-Variable in der bashrc-Datei nicht sehen kann. Gibt es eine Möglichkeit, diese Variablen in jupyter zu laden oder eine custome-Variable hinzuzufügen?
Ich habe ein Problem, dass Jupyter die env-Variable in der bashrc-Datei nicht sehen kann. Gibt es eine Möglichkeit, diese Variablen in jupyter zu laden oder eine custome-Variable hinzuzufügen?
Antworten:
Um eine env-Variable in einem Jupyter-Notizbuch festzulegen, verwenden Sie einfach einen %magischen Befehl , entweder %envoder %set_env, z . B. %env MY_VAR=MY_VALUEoder %env MY_VAR MY_VALUE. (Verwenden%env diese Option, um aktuelle Umgebungsvariablen auszudrucken.)
Siehe: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = valim Backend verwendet werden: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.jsonDatei festlegen :Meine Lösung ist nützlich, wenn Sie jedes Mal, wenn Sie einen Jupyter-Kernel starten, dieselben Umgebungsvariablen benötigen, insbesondere wenn Sie mehrere Sätze von Umgebungsvariablen für verschiedene Aufgaben haben.
Gehen Sie wie folgt vor, um einen neuen Ipython-Kernel mit Ihren Umgebungsvariablen zu erstellen:
jupyter kernelspec list, um eine Liste mit installierten Kerneln und dem Speicherort der Dateien anzuzeigen.python2), in ein neues Verzeichnis (z python2_myENV. B. ).display_namein der neuen kernel.jsonDatei.envWörterbuch hinzu, das die Umgebungsvariablen definiert.Ihr Kernel-JSON könnte so aussehen (ich habe nichts an der installierten Datei kernel.json geändert, außer display_nameund 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_PATHdas Laden kompilierter Module (z. B. in C geschrieben) auswirkt. Das Einstellen dieser Variablen mit %set_envhat nicht funktioniert.C:\Program Files (x86)\Graphviz2.38\bin\dot.exemithilfe Ihrer vorgeschlagenen Technik den vorhandenen Systempfad ergänzen kann? Funktioniert es, wenn ich kein Administratorkonto verwende? Ich benutze Windows 10.
sys.executablees PYTHONEXECUTABLEsei denn, es wurde zuvor festgelegt, was Sie festlegen müssen, bevor Python ausgeführt wird.
Wenn Sie Python verwenden, können Sie Ihre Umgebungsvariablen in einer .envDatei definieren und mit python-dotenv aus einem Jupyter-Notizbuch laden .
Installieren Sie python-dotenv:
pip install python-dotenv
Laden Sie die .envDatei in ein Jupyter-Notizbuch:
%load_ext dotenv
%dotenv
Sie können Umgebungsvariablen in Ihrem Code wie folgt einrichten:
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')
Wenn dies natürlich eine vorübergehende Korrektur ist, müssen Sie wahrscheinlich die Variablen in Ihre exportieren, um eine dauerhafte zu erhalten. ~.profileWeitere Informationen finden Sie hier
%env MY_VAR=MY_VALUEsollte die richtige Antwort auf diese Frage sein
Wenn Sie den Variablensatz benötigen, bevor Sie das Notebook starten, war die einzige Lösung, die für mich funktioniert hat, env VARIABLE=$VARIABLE jupyter notebookmit export VARIABLE=valuein .bashrc.
In meinem Fall benötigt Tensorflow die exportierte Variable, um sie erfolgreich in ein Notizbuch zu importieren.
Ein Fall, auf den ich gestoßen bin: Die folgenden zwei Befehle sind äquivalent. Beachten Sie, dass der erste keine Anführungszeichen verwenden kann. Etwas kontraintuitiv führt das Zitieren der Zeichenfolge bei der Verwendung %env VAR ...dazu, dass die Anführungszeichen als Teil des Variablenwerts enthalten sind, was wahrscheinlich nicht das ist, was Sie wollen.
%env MYPATH=C:/Folder Name/file.txt
und
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
Wenn Sie systemd verwenden, habe ich gerade herausgefunden, dass Sie sie anscheinend zur systemd-Einheitendatei hinzufügen müssen. Dies unter Ubuntu 16. Das Einfügen in .profile und .bashrc (sogar in das / etc / profile) führte dazu, dass die ENV-Vars in den Juypter-Notebooks nicht verfügbar waren.
Ich musste bearbeiten:
/lib/systemd/system/jupyer-notebook.service
und geben Sie die Variable ein, die ich in die Einheitendatei einlesen wollte, wie:
Environment=MYOWN_VAR=theVar
und nur dann konnte ich es aus einem Juypter-Notizbuch heraus lesen.
Eine verwandte (kurzfristige) Lösung besteht darin, Ihre Umgebungsvariablen in einer einzigen Datei mit einem vorhersehbaren Format zu speichern, das beim Starten eines Terminals bezogen und / oder in das Notizbuch eingelesen werden kann. Zum Beispiel habe ich eine Datei, .envdie meine Umgebungsvariablendefinitionen im Format hat VARIABLE_NAME=VARIABLE_VALUE(keine Leerzeilen oder zusätzliche Leerzeichen). Sie können diese Datei in den Dateien .bashrcoder zu .bash_profileBeginn einer neuen Terminalsitzung als Quelle verwenden und diese in ein Notizbuch mit folgenden Informationen einlesen:
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
Ich habe einen relativen Pfad verwendet, um zu zeigen, dass diese .envDatei überall leben und relativ zu dem Verzeichnis referenziert werden kann, das die Notebook-Datei enthält. Dies hat auch den Vorteil, dass die Variablenwerte in Ihrem Code nirgendwo angezeigt werden.