PATH の順序が原因で pygtk が見つかりませんでした。デフォルトの PATH はどこで定義されていますか?

PATH の順序が原因で pygtk が見つかりませんでした。デフォルトの PATH はどこで定義されていますか?

pygtk をインポートするプログラムをインストールしました。私の環境では問題なく動作しましたが、「空白」の環境 (新しいユーザーなど) では動作しませんでした。

原因は PATH だと判断しました。しかし、解決方法は不可解でした。

私の PATH は次のように設定されました:

PATH=/usr/lib/qt-3.3/bin
PATH=$PATH:/bin
PATH=$PATH:/usr/bin
PATH=$PATH:/usr/local/bin  #******
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin
PATH=$PATH:/home/td69386/bin

デフォルトは次のように設定されました:

PATH=/usr/lib/qt-3.3/bin
PATH=$PATH:/usr/local/bin  #*****
PATH=$PATH:/bin
PATH=$PATH:/usr/bin
PATH=$PATH:/usr/local/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/sbin
PATH=$PATH:/home/td69386/bin

唯一の違いは順序です。具体的には、 を/usr/bin上に置きます/usr/local/bin

この小さな変更を行わないと、プログラムは次のようなエラーを起こします。

    import pygtk
ImportError: No module named pygtk

PATH の順序がそれほど重要だとは思っていませんでしたが、どうやら重要なようです。なぜシステムはこれほど気にするのでしょうか? pygtk が見つかる前にプログラムを見つけて実行しようとしているのでしょうか?

答え1

PATH の順序は非常に重要です。プログラムを実行すると、シェルはパスの各コンポーネントで、最初のものから順にプログラム名を検索します。同じ名前のプログラムが 2 つ、パスの 2 つに存在する場合 (理由は問いません)、最初に見つかったプログラムが使用されます。あなたの場合、実際には何らかのプログラムのコピーが 2 つあるようですが、それが Python なのか、それともコンポーネントの場所などを Python に指示するプログラムなど他の何かなのかはわかりません。

関連情報