典型的なヘッダーは
#!/usr/bin/env python
しかし、$python ./my_script.py
#!/usr/bin/python
#!python
これら2つのヘッダーの違いは何ですか? 2番目の問題は何でしょうか? pythonインタープリターがPATHにあるかどうかにかかわらず。ありがとう。
まず、次のようにインタープリターを明示的に使用してスクリプトを実行するとき
_$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3
_
_#!
_行は常に無視されます。 _#!
_行は、executableスクリプトのみのUnix機能であり、 manページで完全に文書化されていますexecve(2)
の場合。ここで、_#!
_に続くWordは有効な実行可能ファイルのパス名でなければなりません。そう
_#!/usr/bin/env python
_
ユーザー$PATH
_にあるpython
が実行されます。この形式は、移動するPythonインタープリターに対して弾力性があり、移植性がいくらか向上しますが、ユーザーが標準のPythonインタープリター_$PATH
_でその前に何かを置くことにより、目標に応じて、この動作はOKである場合とそうでない場合があります。
次、
_#!/usr/bin/python
_
Pythonインタープリターが_/usr/bin
_にインストールされているという一般的なケースを扱います。それが他の場所にインストールされている場合、あなたは失うことになります。以下のように、「欲しい」または「何もない」(「フェイルストップ」動作)
_#!/usr/bin/python2.5
_
最後に、
_#!python
_
スクリプトの実行時に現在のディレクトリにpython
実行可能ファイルがある場合にのみ機能します。推奨されません。
スクリプトの冒頭で3つのことをお勧めします。
まず、既に使用環境と言われているように:
#!/usr/bin/env python
次に、エンコードを設定します。
# -*- coding: utf-8 -*-
第三に、いくつかのドキュメント文字列を設定します。
"""This is a awesome
python script!"""
そして、確かにidentには" "
(4スペース)を使用します。
最終ヘッダーは次のようになります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""This is a awesome
python script!"""
最高の願いと幸せなコーディング。
Python実行可能ファイルは/ usr/bin以外の場所にインストールされる可能性がありますが、env
はほとんど常にその場所に存在するため、/usr/bin/env
はよりポータブルです。
env
のマンページから(GNU coreutils 6.10):
env - run a program in a modified environment
理論的には、env
を使用して環境をリセットする(既存の環境変数の多くを削除する)か、スクリプトヘッダーに追加の環境変数を追加できます。実際には、あなたが言及した2つのバージョンは同じです。 (他の人が良い点に言及していますが、python
からenv
を指定すると、パスを知らなくてもpython
を抽象的に指定できます。)
はい、あります-pythonは/usr/bin
、ただし/usr/local/bin
(BSD)。
Virtualenvを使用する場合、~/projects/env/bin/python
/usr/bin/env python
は、python virtualenv
に依存するスクリプトを使用するなど、スクリプトが環境設定に依存している場合に非常に役立ちます。各virtualenvには、python binaryの独自のバージョンがあります。これは、virtualenvにインストールされているパッケージを(PYTHONPATH envに触れることなく)python.
より多くの人々がpython開発)にvirtualenvを使用し始めているので、カスタムを使用したくない場合を除き、/usr/bin/env python
を使用することをお勧めします。 python binary。
注:また、カスタム環境でスクリプトを実行できるようにすると、潜在的なセキュリティ問題(マルチユーザー環境)があることも理解する必要があります。 here からいくつかのアイデアを得ることができます。