编辑:为根工作,sudo是问题。 参见下文。
我有我自己的库的目录,例如我的Python库位于/home/name/lib/py
。
我已经将这个目录添加到Python的PATH中 ,通过/etc/bash.bashrc
下行添加到/etc/bash.bashrc
:
export PYTHONPATH=$PYTHONPATH:/home/name/lib/py
它适用于所有用户(包括root)。 但是它不适用于sudo。 有什么办法可以让sudo使用/etc/bash.bashrc
吗?
编辑:更多信息:
我已经将PYTHONPATH
添加到sudoers文件中,如下所示: Defaults env_keep += "HOME PYTHONPATH"
。 它sitll不起作用。
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
。
但是,我必须在sudoers中保留Defaults env_keep += "PYTHONPATH"
。
实际上,我添加了Defaults env_reset
(它重置了环境变量),但是由于env_keep
它仍然有效。
似乎env_keep
和!env_reset
与彼此冲突,但这只是一个猜测。
所以,整个过程:
export PYTHONPATH=/your/custom/path
到~/.bashrc
或/etc/bash.bashrc
PYTHONPATH
到Defaults env_keep += "ENV1 ENV2 ..."
Defaults !env_reset
(如果存在) 对于PATH
变量也是如此,即使传递了保留环境标志-E
,它也不会进入超级用户环境。
我现在使用这个sudo命令,没有任何其他修改:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
由于这是一个可行的替代方法(对我来说),我以为我会在这里分享。
另一个提示:
sudo echo $PYTHONPATH: /home/name/lib/py
它不会工作。 壳牌将这样解释:
1)从env变量中展开$ PYTHONPATH,例如:/ usr / lib / python
2)执行“sudo echo / usr / lib / python”
操纵PYTHONPATH
替代方法:
这应该可能被张贴在其他地方。 但sudo不会默认处理环境文件。 如果你想调用-i标志应该帮助你。 它会模拟用户初始登录。
你可能需要玩弄你的变数。 http://linux.die.net/man/8/sudo