Когда я выполняю
which pip3
, он указывает на
/usr/.../anaconda3/bin/pip3
Однако, когда я запускаю
sudo which pip3
, результат равен
/usr/bin/pip3
Откуда возникает эта проблема и как мне добиться, чтобы sudo pip
также указывало на /usr/.../anaconda3/bin/pip3
?
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"