2009-08-30 5 views
63

誰でも知っていますか?私は決して答えを見つけることができませんでした。「#!/ usr/bin/env python」は、単に「#!/ usr/bin/python」よりも正しいと思われるのはなぜですか?

+4

トンではありません。私はOSX上にあり、envのマンページはかなり曖昧です。 –

+16

@ S.Lott:最近読んだことがありますか?私のDebianボックスでは、これまでに見た中で最も役に立たないmanページの一つです。それは何かを言っています。 (ここでは、「説明」全体があります:環境内の各NAMEをVALUEに設定し、COMMANDを実行してください)。 – Telemachus

+0

@Telemachus:はい、私はそれを読んだことがあります。ウィキペディアのエントリーを見つけたのはそのためです。 –

答えて

64

(典型的なUnixシェルの$PATHのように、/usr/bin/envを使用すると、/usr/bin/pythonに直接行く間にあなたの気まぐれを(よく、Unixのような環境で)調整できます。しかし、あなたのスクリプトが実行されるPythonのバージョンのコントロールを失うことは、あまり価値のないものではありません。私のコードを見れば、開いて受け入れるのではなく、#!/usr/local/bin/python2.5で始まる可能性が高くなります。#!/usr/bin/env python - スクリプトは重要です。テストして開発した特定のバージョンで実行されていることを確認したいのですが、セミランダムではありません;-)。

+38

もちろん、#!/ usr/bin/env python2.5を使用してセミランダムな選択肢のセットを制約することができます:=) –

+1

+1すばらしい説明、ありがとう!私は以前に "env"という使い方を見ていませんでした...今、私はスクリプトのbag-of-tricksに何か追加します。 –

+3

"env python"を使用しないことを正当化するため+1。私が "env python"を使いたいのであれば、ユーザーがPATHに最初に持っているPythonのバージョンを制御することはできないので、最低の共通分母をコーディングする方がよいでしょう。 –

5

これは、/ usr/local/bin、〜/ bin、/ opt/bin、...またはそれが隠れる可能性のある場所でも 'python'を検出します。

+0

ありがとう!何らかの理由でenvが存在しなかったので、実際には私にとって問題を引き起こしました。 –

+3

これは少し誤解を招くことです。あなたの現在の$ PATH上の最初の "python"と、OS X上のPythonインスタンスが隠れていることはかなりわかります。特に、標準フレームワークはpython.orgから構築され、他のものは、 "python"やその他の実行可能ファイルとスクリプトが格納されているフレームワーク内に "bin"サブディレクトリを持っています。/usr/local/binなどの通常の場所でシンボリックリンクを持っているかもしれないし、持っていないかもしれない複数のインスタンスで終わるのはとても簡単です。この場合のOS Xでの$ PATHの管理は、フレームワークスタイルのビルドがないシステムほど簡単ではありません。 –

+2

@KennethReitz: '/ usr/bin/env'が存在しない場合、システムは壊れています。 'env'はPOSIX標準で必要なツールです。 – MestreLion

24

wikipedia

Shebangsからシステム実行可能ファイルの絶対パスを指定します。これは非標準のファイルシステムレイアウトが

多くの場合、プログラムは/ usr/binに/ ENVは、それがでPythonの実行可能ファイルを見つけ、この 制限

10

を回避するために使用することができているシステムで 問題を引き起こす可能性がありますあなたのそれを使用しています。なぜなら、Pythonは常に/ usr/bin/pythonにあるとは限らないからです。 envは常に/ usr/binにあります。

+0

envは常に存在するとは限りませんが、より多くのマシンでPythonを見つける可能性が増しています。 :) – Will

関連する問題