EDIT: Works for root, sudo is the problem. Read below.
I have a directory with my own libraries, e.g. my Python libraries are located at /home/name/lib/py
This should probably be posted somewhere else. But sudo will not process the environment file by default. If you want to invoke that the -i flag should help you out. It will simulate that users initial login.
You may have to play around with where you're putting your variables too. http://linux.die.net/man/8/sudo
Alternatives to manipulating PYTHONPATH
:
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.
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"
Follow configuration helps me to run multiple python services in dedicated VENVs on one Centos host
/etc/sysconfig/my-app
EnvironmentFile
option in service config see code below:
-bash-4.2$ sudo vi /etc/sysconfig/my-app
PATH=/usr/local/my-app/env/bin:$PATH
LD_LIBRARY_PATH=/usr/local/my-app/env/lib:$LD_LIBRARY_PATH
-bash-4.2$ sudo vi /etc/systemd/system/my-app.service
[Unit]
Description=my-app daemon
After=network.target
[Service]
EnvironmentFile=/etc/sysconfig/my_app
User=app_user
Group=app_user
Type=simple
ExecStart=/usr/local/my-app/env/bin/python /usr/local/my-app/main.py
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
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:
export PYTHONPATH=/your/custom/path
to ~/.bashrc
or /etc/bash.bashrc
PYTHONPATH
to Defaults env_keep += "ENV1 ENV2 ..."
in sudoers fileDefaults !env_reset
from sudoers file if present