Un altro suggerimento:
sudo echo $PYTHONPATH:
/home/name/lib/py
Non funzionerà. Shell lo interpreterà così:
1) espandere $PYTHONPATH dalla variabile env per esempio:/usr/lib/python
2) eseguire "sudo echo /usr/lib/python"
La correzione nel mio caso è stata la rimozione di Defaults !env_reset
da sudoers.
Ma ho dovuto mantenere Defaults env_keep += "PYTHONPATH"
nei sudoers.
In realtà ho aggiunto Defaults env_reset
(che reimposta le variabili di ambiente), ma funziona ancora a causa di env_keep
.
Sembra che env_keep
e !env_reset
sono in conflitto tra loro, ma è solo un'ipotesi.
Quindi, l'intero processo:
- aggiungi
export PYTHONPATH=/your/custom/path
a~/.bashrc
o/etc/bash.bashrc
- aggiungi
PYTHONPATH
aDefaults env_keep += "ENV1 ENV2 ..."
nel file sudoers - rimuovi
Defaults !env_reset
dal file sudoers se presente
Alternative alla manipolazione di PYTHONPATH
:
- virtualenv
- distutils
Lo stesso vale per il PATH
variabile, non viene nemmeno trasferita nell'ambiente del superutente, anche se stai passando il flag di conservazione dell'ambiente -E
.
Sto usando questo comando sudo ora senza altre modifiche:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Poiché è un approccio alternativo che funziona (per me), ho pensato di condividerlo qui.