PYTHONPATH不适用于GNU / Linux上的sudo(适用于root)

编辑:为根工作,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与彼此冲突,但这只是一个猜测。


所以,整个过程:

  1. export PYTHONPATH=/your/custom/path~/.bashrc/etc/bash.bashrc
  2. 在sudoers文件中添加PYTHONPATHDefaults env_keep += "ENV1 ENV2 ..."
  3. 从sudoers文件中删除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替代方法:

  • 的virtualenv
  • 的distutils

这应该可能被张贴在其他地方。 但sudo不会默认处理环境文件。 如果你想调用-i标志应该帮助你。 它会模拟用户初始登录。

你可能需要玩弄你的变数。 http://linux.die.net/man/8/sudo