it-swarm.com.de

Wie man die Variable env im Jupyter-Notebook einstellt

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 eigene custome-Variable hinzuzufügen?

26
Ehab AlBadawy

Um eine env-Variable in einem Jupyter-Notizbuch festzulegen, verwenden Sie einfach einen % magic -Befehl, entweder %env oder %set_env, z. B. %env MY_VAR=MY_VALUE oder %env MY_VAR MY_VALUE. (Verwenden Sie %env, um aktuelle Umgebungsvariablen auszudrucken.)

Siehe: http://ipython.readthedocs.io/de/stable/interactive/magics.html

33
michael

Sie können Umgebungsvariablen wie folgt in Ihrem Code 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')

Dies ist natürlich ein temporärer Fix, um einen permanenten Fix zu erhalten, müssen Sie die Variablen wahrscheinlich in Ihren ~.profile exportieren. Weitere Informationen finden Sie hier

13
kardaj

Wenn Sie Python verwenden, können Sie Ihre Umgebungsvariablen in einer .env-Datei definieren und diese mit python-dotenv aus einem Jupyter-Notebook laden.

Installiere python-dotenv:

pip install python-dotenv

Laden Sie die .env-Datei in ein Jupyter-Notizbuch:

%load_ext dotenv
%dotenv
2
aparkerlue

Sie können die Variablen auch in Ihrer kernel.json-Datei festlegen:

Meine Lösung ist nützlich, wenn Sie bei jedem Start eines Jupyter-Kernels die gleichen Umgebungsvariablen benötigen, insbesondere wenn Sie mehrere Gruppen von Umgebungsvariablen für verschiedene Aufgaben haben.

Gehen Sie folgendermaßen vor, um einen neuen IPython-Kernel mit Ihren Umgebungsvariablen zu erstellen:

  • Lesen Sie die Dokumentation unter https://jupyter-client.readthedocs.io/de/stable/kernels.html#kernel-specs
  • Führen Sie jupyter kernelspec list aus, um eine Liste mit installierten Kerneln und dem Speicherort der Dateien anzuzeigen.
  • Kopieren Sie das Verzeichnis, das den Kernel.json enthält (z. B. python2), in ein neues Verzeichnis (z. B. python2_myENV).
  • Ändern Sie den display_name in der neuen kernel.json-Datei.
  • Fügen Sie ein env-Wörterbuch hinzu, das die Umgebungsvariablen definiert.

Ihr Kernel-Json könnte so aussehen (ich habe nichts am installierten Kernel.json geändert, außer display_name und env):

{
 "display_name": "Python 2 with environment",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "env": {"LD_LIBRARY_PATH":""}
}

Anwendungsfälle und Vorteile dieses Ansatzes

  • In meinem Anwendungsfall wollte ich die Variable LD_LIBRARY_PATH einstellen, die bewirkt, wie kompilierte Module (z. B. in C geschrieben) geladen werden. Das Setzen dieser Variablen mit %set_env hat nicht funktioniert.
  • Ich kann mehrere Python-Kernel mit unterschiedlichen Umgebungen haben.
  • Um die Umgebung zu ändern, muss ich nur den Kernel wechseln/neu starten, aber ich muss die Jupyter-Instanz nicht neu starten (nützlich, wenn ich die Variablen in einem anderen Notebook nicht verlieren möchte). Siehe -however - https://github.com/jupyter/notebook/issues/2647
1
TheEspinosa

Wenn Sie den Variablensatz vor dem Start des Notebooks benötigen, war die einzige Lösung, die für mich funktioniert hat, env VARIABLE=$VARIABLE jupyter notebook mit export VARIABLE=value in .bashrc

In meinem Fall benötigt tensorflow die exportierte Variable für den erfolgreichen Import in ein Notizbuch.

1
Baschdl

Wenn Sie systemd verwenden, habe ich gerade herausgefunden, dass Sie sie scheinbar der systemd-Unit-Datei hinzufügen müssen. Dies auf Ubuntu 16. Wenn Sie sie in .profile und .bashrc (sogar das/etc/-Profil) einfügen, sind die ENV-Vars in den Notizbüchern von juypter nicht verfügbar.

Ich musste bearbeiten:

/lib/systemd/system/jupyer-notebook.service

und füge die Variable ein, die ich in der Unit-Datei lesen wollte:

Environment=MYOWN_VAR=theVar

und nur dann konnte ich es aus dem Notizbuch lesen.

1
Andy D

Eine gotcha, auf die ich gestoßen bin: Die folgenden zwei Befehle sind gleichwertig. Beachten Sie die ersten können Anführungszeichen nicht verwenden. Wenn Sie den String bei Verwendung von %env VAR ... etwas unpassend zitieren, werden die Anführungszeichen als Teil des Variablenwerts eingefügt. 

%env MYPATH=C:/Folder Name/file.txt

und

import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
0
evan_b

Eine verwandte (kurzfristige) Lösung besteht darin, Ihre Umgebungsvariablen in einer einzigen Datei mit einem vorhersagbaren Format zu speichern, das beim Starten eines Terminals bezogen werden kann und/oder in das Notebook eingelesen werden kann. Zum Beispiel habe ich eine Datei .env, die Definitionen meiner Umgebungsvariablen im Format VARIABLE_NAME=VARIABLE_VALUE hat (keine Leerzeilen oder zusätzliche Leerzeichen). Sie können diese Datei zu Beginn einer neuen Terminalsitzung in die .bashrc- oder .bash_profile-Dateien stecken, und Sie können diese in ein Notizbuch 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 .env-Datei überall leben und relativ zu dem Verzeichnis referenziert werden kann, in dem sich die Notebook-Datei befindet. Dies hat auch den Vorteil, dass die Variablenwerte nirgendwo in Ihrem Code angezeigt werden.

0
wingr