“sudo pip” difere do normal “pip”

4

Quando executo

which pip3

aponta para

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

No entanto, quando eu corro

sudo which pip3

o resultado é

/usr/bin/pip3

De onde vem esse problema e como eu alcanço que sudo pip também aponta para /usr/.../anaconda3/bin/pip3 ?

    
por PKuhn 03.06.2016 / 21:06

1 resposta

5

sudo higieniza o ambiente antes de executar qualquer comando. Ao fazer isso, se o valor da diretiva secure_path for definido, ele será usado como PATH para os comandos sudo , não o atual PATH .

No meu sistema:

% sudo grep -E 'secure_path' /etc/sudoers
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Então eu tenho:

% 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

O que você pode fazer para manter seu caminho atual ou adicionar /usr/.../anaconda3/bin a sudo ' PATH :

  • Passe PATH no ambiente do comando which :

    sudo PATH="$PATH" which pip3
    

    Qualquer PATH desejado também pode ser definido.

  • Mantenha o ambiente atual enquanto executa sudo em:

    sudo -E which pip3
    
  • Desative o valor secure_path colocando um # na frente ou remova a linha para manter o atual PATH :

    # Defaults        secure_path="....."   
    

    Em vez disso, você também pode modificar o secure_path para adicionar apenas /usr/.../anaconda3/bin a ele, no início .

  • Adicione PATH à diretiva env_keep para manter o PATH no ambiente sudo fornecido:

    Defaults        env_keep += "PATH"
    
por heemayl 03.06.2016 / 21:46