/ / python: os.getenv gibt keine mit sudo zurück? - Python, Linux, Umgebungsvariablen

python: os.getenv gibt keine mit sudo zurück? - Python, Linux, Umgebungsvariablen

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 № 1

wenn 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 bashoffensichtlich 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.