私の問題は、私がするときです:
$ which python => ディレクトリとして /a/b/c/python を取得します
しかし、 $ sudo which python => を実行すると、結果として /d/e/python が得られます
通常のケースと一致するようにsudoを変更するにはどうすればよいですか。ソースからライブラリをインストールできなくなります。
私の問題は、私がするときです:
$ which python => ディレクトリとして /a/b/c/python を取得します
しかし、 $ sudo which python => を実行すると、結果として /d/e/python が得られます
通常のケースと一致するようにsudoを変更するにはどうすればよいですか。ソースからライブラリをインストールできなくなります。
https://askubuntu.com/questions/477987/two-python-distributions-sudo-picking-the-wrong-oneによると、これは secure_path (/etc/sudoers で指定) が通常の PATH をオーバーライドした結果です。
実行したいバイナリへのパスへのパスを指定することで、これを回避しました。例えば:
$ which pip
/opt/local/bin/pip
$ sudo /opt/local/bin/pip install foo
理想的ではありませんが、動作し、secure_path を覆すことはありません。
$PATH で最初に見つかったものを使用します
やってみる
echo $PATH
それから
sudo bash -c 'echo $PATH'
これらは違うに違いない。
いずれにせよ、通常、/root と現在のユーザーの両方で使用するシェル用の何らかの rc スクリプトがあり、必要なパスの環境変数のパスを再配置するだけです。
私は最初にこれを試します:
sudo -i which python
これにより、(間接的に)root
ユーザーのプロファイルが実行され、パスのデフォルト以外の構成が含まれます。(デフォルトでsudo
は、気にしません。)
それが機能しない場合は、それがユーザーのプロファイル/usr/local/bin
によって設定されたパスにroot
ない (または前にない/usr/bin
) ことを示しているため、オプションは、root
ユーザーのプロファイルを変更して上記を使用するか、そうでなければ使用する:
sudo -E which python
パス (および残りの環境)を保持します。これは安全性が低い可能性があります。
これらの各オプションの詳細については、sudo
man-pageを参照してください。