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/pathhinzu bis~/.bashrcoder/etc/bash.bashrc - fügen Sie
PYTHONPATHhinzu bisDefaults env_keep += "ENV1 ENV2 ..."in der sudoers-Datei - Entfernen Sie
Defaults !env_resetaus 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.