2012-03-20 14 views
8

Pythonライブラリモジュールは#!/usr/bin/envのpythonで始めるべきですか?Pythonライブラリモジュールは#!/ usr/bin/env pythonで始めるべきですか?

*.pyの最初の行を見ると、(PythonのlibがDebianに保存されている)/usr/share/pysharedには、hashbang行で始まるファイルとそうでないファイルの両方があることがわかります。

この行を含めたり除外する理由はありますか?

+0

ちょうど '#!python'に何か問題がありますか? – Kos

+0

@Kos:はい、あります:動作しません。少なくともどこにいても。 '/ usr/bin/env'は移植性のためだけに使用されます。 –

+1

また、virtualenvやその他の一般的なツールを使用している場合は、実際のP​​ythonインタプリタの場所が変わるためです。 –

答えて

6

/usr/share/pysharedにある一部のファイルがシバンを宣言したのはなぜか説明がつきにくい&です。ファイルuno.pypyinotify.pyを取ってください。前者にはシバンがなく、後者にはシバンがあります。

  1. uno.pyは、他のプログラム/スクリプトでインポートして使用するPythonモジュールです。したがって、コマンドラインから直接実行されることはありません。一方pyinotify.py
  2. はシェバングが含まれているとあなたはそれが(あなたがそれにchmod u+xを実行する場合、それが実行可能にしたことができます)一番下に次の行が含まれていることを確認できます。

    if __name__ == '__main__': 
        command_line() 
    

あなたはシバンでPythonバイナリをハードコーディングすることができますが、他の人が触れたように/usr/bin/envを使うと移植性が向上します。

0

あなたのスクリプトが実行可能になりたい場合は、この行の行

+1

これは直接質問に答えません。あなたの答えを改善してください。 – Tadeck

+0

私はそうしないと、この行を含める理由はありますか?トップレベルには実行可能なものは何もなく、定義だけはありません。 –

+6

-1。この回答は間違っています。この行は、インタプリタを指定するために使用され、 "スクリプトと実行可能ファイルを作成しない"ために使用されます。後者は、ファイルのアクセス許可を変更することによって実現されます(UNIXの場合)。 –

5

を含める必要がシェバングはラインです。詳細は、wikipedia articleをご覧ください。基本的には、コマンドラインから直接実行された場合にファイルを実行できるインタプリタを指定します。

シェルから直接実行する場合を除き、ファイルの先頭にこの行を含める必要はありません。いくつかのPythonモジュール(ftplibなど)には、それらを直接実行するときにいくつかの機能があります。これらは上に#!行を持ちます。ほとんどの場合、このような機能がないため、この行は必要ありません。

関連する問題