«Sudo pip» отличается от обычного «pip»

Когда я выполняю

which pip3

, он указывает на

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

Однако, когда я запускаю

sudo which pip3

, результат равен

/usr/bin/pip3

Откуда возникает эта проблема и как мне добиться, чтобы sudo pip также указывало на /usr/.../anaconda3/bin/pip3?

4
задан 4 June 2016 в 09:13

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 кому: sudo PATH:

  • Передача PATH в среде which команда:

    sudo PATH="$PATH" which pip3
    

    Любой желаемый PATH может быть установлен также.

  • Сохраните текущую среду при выполнении sudo :

    sudo -E which pip3
    
  • Отключите secure_path значение путем помещения a # впереди или удалите строку для хранения тока PATH:

    # Defaults        secure_path="....."   
    

    Вместо этого можно также изменить secure_path просто добавить /usr/.../anaconda3/bin к нему, вначале.

  • Добавить PATH к env_keep директива для хранения PATH в sudo если среда:

    Defaults        env_keep += "PATH"
    
5
ответ дан 4 June 2016 в 09:13

Другие вопросы по тегам:

Похожие вопросы: