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彼此冲突,但这只是猜测.
那么,整个过程:
export PYTHONPATH=/your/custom/path到~/.bashrc或/etc/bash.bashrcPYTHONPATH到Defaults env_keep += "ENV1 ENV2 ..."sudoers文件中Defaults !env_reset从sudoers文件中删除(如果存在)kvz*_*kvz 13
对于PATH变量也是如此,即使您传递了保留环境标志,它也不会进入超级用户环境-E.
我现在使用这个sudo命令而没有任何其他修改:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Run Code Online (Sandbox Code Playgroud)
因为它是另一种有效的方法(对我来说),我想我会在这里分享.