実行するとき
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
現在のパスを維持するため、またはSudo
のPATH
に/usr/.../anaconda3/bin
を追加するためにできること:
PATH
コマンドの環境でwhich
を渡します。
Sudo PATH="$PATH" which pip3
必要なPATH
も設定できます。
Sudo
を実行している間、現在の環境を維持します:
Sudo -E which pip3
secure_path
を先頭に配置して#
値を無効にするか、行を削除して現在のPATH
を保持します。
# Defaults secure_path="....."
代わりに、secure_path
を変更して、単に/usr/.../anaconda3/bin
を追加することもできます先頭。
PATH
をenv_keep
ディレクティブに追加して、PATH
をSudo
提供環境に保持します。
Defaults env_keep += "PATH"