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?
python
bash
environment-variables
jupyter-notebook
Ehab AlBadawy
quelle
quelle
os.environ[var] = val
im Backend verwendet werden: github.com/ipython/ipython/blob/master/IPython/core/magics/…Sie können auch die Variablen in Ihrer
kernel.json
Datei 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 (zpython2_myENV
. B. ).display_name
in der neuenkernel.json
Datei.env
Wö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_name
undenv
):{ "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
LD_LIBRARY_PATH
das Laden kompilierter Module (z. B. in C geschrieben) auswirkt. Das Einstellen dieser Variablen mit%set_env
hat nicht funktioniert.quelle
C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
mithilfe Ihrer vorgeschlagenen Technik den vorhandenen Systempfad ergänzen kann? Funktioniert es, wenn ich kein Administratorkonto verwende? Ich benutze Windows 10.sys.executable
esPYTHONEXECUTABLE
sei 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
.env
Datei definieren und mit python-dotenv aus einem Jupyter-Notizbuch laden .Installieren Sie python-dotenv:
Laden Sie die
.env
Datei in ein Jupyter-Notizbuch:quelle
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.
~.profile
Weitere Informationen finden Sie hierquelle
%env MY_VAR=MY_VALUE
sollte die richtige Antwort auf diese Frage seinWenn 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 notebook
mitexport VARIABLE=value
in.bashrc
.In meinem Fall benötigt Tensorflow die exportierte Variable, um sie erfolgreich in ein Notizbuch zu importieren.
quelle
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"
quelle
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.
quelle
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,
.env
die meine Umgebungsvariablendefinitionen im Format hatVARIABLE_NAME=VARIABLE_VALUE
(keine Leerzeilen oder zusätzliche Leerzeichen). Sie können diese Datei in den Dateien.bashrc
oder zu.bash_profile
Beginn 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
.env
Datei ü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.quelle