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/patha~/.bashrco/etc/bash.bashrc - aggiungi
PYTHONPATHaDefaults env_keep += "ENV1 ENV2 ..."nel file sudoers - rimuovi
Defaults !env_resetdal 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.