Ich habe Umgebungsvariable gesetzt LIBRARY_PATH
im /etc/bash.bashrc
beim Hinzufügen export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
Am Ende.
Wenn ich versuche, die env-Variable von python zu bekommen:
ipython
import os
print os.getenv("LIBRARY_PATH")
Alles funktioniert gut, es druckt /usr/local/cuda/lib64:
.
ABER wenn ich Ipython mit aufrufen sudo
:
sudo ipython
import os
pront os.getenv("LIBRARY_PATH")
Ich bekomme nichts. Ich denke, das ist über Env-Variablen über die Benutzer, aber was ist die Ditails? ich setze LIBRARY_PATH
im /etc/bash.bashrc
Das ist die "systemweite Bashrc-Datei".
Wie kann ich die richtige env-Variable mit sudo in Python bekommen?
Antworten:
1 für die Antwort № 1wenn du willst sudo
Um Umgebungsvariablen (die allgemein als Sicherheitsrisiko angesehen wird) zu durchlaufen, verwenden sudo -E
.
Beachten Sie, dass es ist bash
welche die Befehle in den Bashrc-Dateien ausführt. ipython
ist nicht bash
offensichtlich und sudo
startet keinen Shell-Prozess, geschweige denn einen bash-Prozess, nur um den Befehl auszuführen, den Sie ausführen möchten. Daher wird keine Ihrer bashrc - Dateien von der. Ausgeführt sudo
Befehl oder in der sudo
Unterprozess. Natürlich kannst du es sagen sudo
einen Bash-Prozess ausführen:
sudo bash -c ipython
Jedoch, bash
Führt Startdateien nicht aus, wenn festgestellt wird, dass sie in einem sudo-Prozess ausgeführt werden.
Für weitere Informationen wie sudo
reinigt die Umgebung, tippe ein man 5 sudoers
und springe runter zum Command environment
Sektion.
0 für die Antwort № 2
Wenn Sie die Umgebungsvariable in /root/.bash_profile setzen, erhalten Sie wahrscheinlich das gewünschte Verhalten, wenn Sie sudo verwenden.