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

usr*_*usr 17 python linux macos bash pythonpath

编辑:为root工作,sudo是问题.参见下文.

我有一个带有我自己的库的目录,例如我的Python库位于/home/name/lib/py.
我通过将以下行添加到以下行,将此目录添加到Python的所有用户(包括root)的PATH/etc/bash.bashrc:

export PYTHONPATH=$PYTHONPATH:/home/name/lib/py
Run Code Online (Sandbox Code Playgroud)

它适用于所有用户(包括root用户).但它对sudo不起作用.有什么办法可以让sudo使用/etc/bash.bashrc吗?

编辑:更多信息:

我已经添加PYTHONPATH到sudoers文件像这样:Defaults env_keep += "HOME PYTHONPATH".它不会起作用.

env | grep PYTHON:
    PYTHONDONTWRITEBYTECODE=1
    PYTHONPATH=/home/name/lib/py

sudo env | grep PYTHON:
    PYTHONDONTWRITEBYTECODE=1

sudo echo $PYTHONPATH:
    /home/name/lib/py
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 13

在我的情况下修复是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. 添加PYTHONPATHDefaults env_keep += "ENV1 ENV2 ..."sudoers文件中
  3. Defaults !env_reset从sudoers文件中删除(如果存在)

  • 此解决方案也适用于OS X.只需在OS X上的/ etc/sudoers中添加一行"Defaults env_keep + ="PYTHONPATH"`. (2认同)

kvz*_*kvz 13

对于PATH变量也是如此,即使您传递了保留环境标志,它也不会进入超级用户环境-E.

我现在使用这个sudo命令而没有任何其他修改:

sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Run Code Online (Sandbox Code Playgroud)

因为它是另一种有效的方法(对我来说),我想我会在这里分享.