PYTHONPATH not working for sudo on GNU/Linux (works for root)
Another tip:
sudo echo $PYTHONPATH:
/home/name/lib/py
It won't work. Shell will interpret it like this:
1) expand $PYTHONPATH from env variable for example: /usr/lib/python
2) execute "sudo echo /usr/lib/python"
The fix in my case was to remove Defaults !env_reset
from sudoers.
But, I had to keep Defaults env_keep += "PYTHONPATH"
in sudoers.
I've actually added Defaults env_reset
(which resets environment variables), but it still works because of env_keep
.
It seems that env_keep
and !env_reset
conflict with eachother, but that's just a guess.
So, the whole process:
- add
export PYTHONPATH=/your/custom/path
to~/.bashrc
or/etc/bash.bashrc
- add
PYTHONPATH
toDefaults env_keep += "ENV1 ENV2 ..."
in sudoers file - remove
Defaults !env_reset
from sudoers file if present
Alternatives to manipulating PYTHONPATH
:
- virtualenv
- distutils
The same is true for the PATH
variable, it's also not carried into the super user environment, even though you're passing the preserve environment flag -E
.
I'm using this sudo command now without any other modifications:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Since it's an alternative approach that works (for me) I thought I'd share here.