“sudo pip”与普通的“pip”不同
当我执行
which pip3
它指向
/usr/.../anaconda3/bin/pip3
但是,当我跑
sudo which pip3
结果是
/usr/bin/pip3
这个问题来自哪里,我如何实现sudo pip
也指向/usr/.../anaconda3/bin/pip3
?
sudo
在运行任何命令之前清理环境。 这样做时,如果设置了指令secure_path
的值,它将被用作sudo
命令的PATH
,而不是当前的PATH
。
在我的系统中:
% sudo grep -E 'secure_path' /etc/sudoers Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
所以我有:
% echo $PATH /home/foobar/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games % sudo bash -c 'echo $PATH' /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
你可以做些什么来保持你当前的路径或将/usr/.../anaconda3/bin
添加到sudo
的PATH
:
-
在
PATH
命令的环境中传递PATH
:sudo PATH="$PATH" which pip3
也可以设置任何所需的
PATH
。 -
运行
sudo
保持当前环境:sudo -E which pip3
-
通过在前面放置一个
#
或删除该行以保留当前PATH
来禁用secure_path
值:# Defaults secure_path="....."
相反,您也可以修改
secure_path
以在开头添加/usr/.../anaconda3/bin
。 -
将
PATH
添加到env_keep
指令以将PATH
保留在sudo
提供的环境中:Defaults env_keep += "PATH"