PYTHONPATH 不适用于 GNU/Linux 上的 sudo(适用于 root) [英] PYTHONPATH not working for sudo on GNU/Linux (works for root)
问题描述
适用于 root,sudo 是问题所在.阅读下文.
Works for root, sudo is the problem. Read below.
我有一个包含我自己的库的目录,例如我的 Python 库位于 /home/name/lib/py
.
通过将以下行添加到 /etc/bash.bashrc
,我已将此目录添加到所有用户(包括 root)的 Python 的 PATH:
I have a directory with my own libraries, e.g. my Python libraries are located at /home/name/lib/py
.
I've added this directory to Python's PATH for all users (including root) by adding the following line to /etc/bash.bashrc
:
export PYTHONPATH=$PYTHONPATH:/home/name/lib/py
它适用于所有用户(包括 root).但它不适用于 sudo.有什么办法可以让 sudo 使用 /etc/bash.bashrc
?
It works for all users (including root). But it doesn't work for sudo. Is there any way I can make sudo use /etc/bash.bashrc
?
更多信息:
我已将 PYTHONPATH
添加到 sudoers 文件中,如下所示:Defaults env_keep += "HOME PYTHONPATH"
.它不工作.
I've added PYTHONPATH
to sudoers file like so: Defaults env_keep += "HOME PYTHONPATH"
. It sitll doesn't work.
env | grep PYTHON:
PYTHONDONTWRITEBYTECODE=1
PYTHONPATH=/home/name/lib/py
sudo env | grep PYTHON:
PYTHONDONTWRITEBYTECODE=1
sudo echo $PYTHONPATH:
/home/name/lib/py
推荐答案
在我的案例中的修复是从 sudoers 中删除 Defaults !env_reset
.
The fix in my case was to remove Defaults !env_reset
from sudoers.
但是,我必须在 sudoers 中保留 Defaults env_keep += "PYTHONPATH"
.
我实际上已经添加了 Defaults env_reset
(它会重置环境变量),但由于 env_keep
,它仍然有效.
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
.
看起来 env_keep
和 !env_reset
相互冲突,但这只是一个猜测.
It seems that env_keep
and !env_reset
conflict with eachother, but that's just a guess.
所以,整个过程:
- 添加
export PYTHONPATH=/your/custom/path
到~/.bashrc
或/etc/bash.bashrc
- 将
PYTHONPATH
添加到 sudoers 文件中的Defaults env_keep += "ENV1 ENV2 ..."
- 从 sudoers 文件中删除
Defaults !env_reset
(如果存在)
- 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
这篇关于PYTHONPATH 不适用于 GNU/Linux 上的 sudo(适用于 root)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!