Pythonのスクリプトで #!/usr/bin/env python3 が使われるわけ

Pythonのスクリプトの shebang行 では、

#!/usr/bin/env python3

が使われることが多いです。

その理由はなぜでしょうか。

env の役割

man env を調べると、以下のような説明が出てきます。

名前
env – 変更した環境でプログラムを実行する

書式
env [OPTION]… [-] [NAME=VALUE]… [COMMAND [ARG]…]

説明
環境変数 NAME を VALUE に設定し、 COMMAND を実行します。

env は引数で変数を設定することができ、その環境でコマンドを実行できるようです。

python3 のパスを変えてみます。

  • 普通に which python3 を実行
    which python3
    /usr/bin/python3
    
  • env に引数をつけないで which python3 を実行
    env which pythone
    /usr/bin/python3
    
    • 先ほどと同じ結果になりました。変数を何も変えていないので当然です
  • env でPATH変数を変化させて which python3 を実行
    env PATH=/usr/local/fsl/bin:$PATH which python3
    /usr/local/fsl/bin/python3
    
    • PATHの一番最初にFSLが来たことで、FSLの中に入っているpython3 が呼び出されました。

ということで、 env python3 は、「現在のパスの最初にあるpython3」を意味することになるわけですね。
システムの中に Python は複数存在し得るので、Shebang行にパス決め打ちのpythonを指定するより、envを使ったほうが汎用性の高いスクリプトになることがわかりました。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください