Noch ein Tipp:
sudo echo $PYTHONPATH:
/home/name/lib/py
Es wird nicht funktionieren. Shell interpretiert es wie folgt:
1) Erweitern Sie $PYTHONPATH aus der Umgebungsvariablen, zum Beispiel:/usr/lib/python
2) Führen Sie "sudo echo /usr/lib/python"
aus
Die Lösung in meinem Fall bestand darin, Defaults !env_reset
zu entfernen von Sudoern.
Aber ich musste Defaults env_keep += "PYTHONPATH"
behalten in Sudoern.
Ich habe tatsächlich Defaults env_reset
hinzugefügt (was Umgebungsvariablen zurücksetzt), aber es funktioniert immer noch wegen env_keep
.
Es scheint, dass env_keep
und !env_reset
miteinander in Konflikt geraten, aber das ist nur eine Vermutung.
Also, der ganze Prozess:
- fügen Sie
export PYTHONPATH=/your/custom/path
hinzu bis~/.bashrc
oder/etc/bash.bashrc
- fügen Sie
PYTHONPATH
hinzu bisDefaults env_keep += "ENV1 ENV2 ..."
in der sudoers-Datei - Entfernen Sie
Defaults !env_reset
aus der sudoers-Datei, falls vorhanden
Alternativen zur Manipulation von PYTHONPATH
:
- virtuell
- distutils
Dasselbe gilt für PATH
-Variable, wird sie auch nicht in die Superuser-Umgebung übertragen, obwohl Sie das Umgebungs-Flag -E
übergeben .
Ich verwende diesen sudo-Befehl jetzt ohne weitere Änderungen:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Da es ein alternativer Ansatz ist, der (für mich) funktioniert, dachte ich, ich würde ihn hier teilen.