“sudo pip”与普通的“pip”不同

“sudo pip”与普通的“pip”不同

当我执行时

which pip3

它指向

/usr/.../anaconda3/bin/pip3

然而,当我跑步时

sudo which pip3

结果是

/usr/bin/pip3

这个问题从何而来,我该如何实现这sudo pip一点呢/usr/.../anaconda3/bin/pip3

答案1

sudo在运行任何命令之前清理环境。这样做时,如果设置了指令的值secure_path,它将被用作PATH命令的sudo,而不是当前的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的环境which

    sudo PATH="$PATH" which pip3
    

    PATH也可以设置任何所需的。

  • 运行时保持当前环境sudo

    sudo -E which pip3
    
  • 通过在前面放置一个来禁用该secure_path#或删除该行以保留当前的PATH

    # Defaults        secure_path="....."   
    

    相反,您也可以修改它secure_path以添加/usr/.../anaconda3/bin一开始

  • 添加PATHenv_keep指令以保持PATHsudo提供的环境中:

    Defaults        env_keep += "PATH"
    

相关内容