“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添加到sudoPATH

  • 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"