シバンを使用し#!/usr/bin/env pythonてスクリプトを実行するとき、システムはどの方法pythonを使用するかをどのように知るのですか 私が探している場合python、環境変数にbinパス私は何を見つけることはありません。
env | grep -i python
シバンを使用し#!/usr/bin/env pythonてスクリプトを実行するとき、システムはどの方法pythonを使用するかをどのように知るのですか 私が探している場合python、環境変数にbinパス私は何を見つけることはありません。
env | grep -i python
回答:
(「シャープバン」からの)シバンライン#!は、カーネルによって処理されます。カーネルは、などの環境変数について知りたくありませんPATH。したがって、shebang行の名前は、実行可能ファイルへの絶対パスである必要があります。また、スクリプト名の前にその実行可能ファイルに渡す追加の引数を指定することもできます(システムに依存する制限付きでここでは説明しません)。たとえば、Pythonスクリプトの場合、指定できます
#!/usr/bin/python
最初の行で、スクリプトを実行すると、カーネルが実際に実行され/usr/bin/python /path/to/scriptます。しかし、それは便利ではありません。コマンドのフルパスを指定する必要があります。あなたは何を持っている場合pythonでは/usr/binいくつかのマシン上や/usr/local/bin他の人に?それとも、自分の設定したいPATHとの/home/joe/opt/python-2.5/binパイソンの特定のバージョンを使用するように?カーネルはPATHルックアップを行わないため、カーネルでコマンドを実行し、次のコマンドで目的のインタープリターを検索しますPATH。
#!/fixed/path/to/path-lookup-command python
それpath-lookup-commandは引数として実行可能ファイルの名前を取り、それを調べてPATH実行する必要があります:カーネルが実行されます/fixed/path/to/path-lookup-command python /path/to/script。それが起こると、envコマンドはまさにそれを行います。その主な目的は、異なる環境でコマンドを実行することですが、でコマンド名を検索する$PATHため、ここでの目的には最適です。
これは公式には保証されていませんが、で提供さenvれている歴史的なUnixシステム/usr/binと最新のシステムは、の広範な使用のために正確にその場所を保持してい#!/usr/bin/envます。したがって、実際には、ユーザーのお気に入りのPythonインタープリターがスクリプトを実行する必要があることを指定する方法は次のとおりです。
#!/usr/bin/env python
envとwhich?PATH環境から最も適格な実行可能ファイルも取得します。
whichは実行可能ファイルを見つけ、そのパスを出力します。env最初の引数で指定されたプログラムを見つけて実行し、残りの引数を渡します。
env評価版ですwhich。
そう、実行:
env | grep PATH
$ PATHはディレクトリのリストです。Unixは、「python」が見つかるまで、ディレクトリのリストを順番に調べます。
「which」コマンドを使用して、検出されたディレクトリを確認できます。
which python
sys.path有効化されたenv $ env python3 (['', '/home/user/test', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/user/.local/lib/python3.4/site-packages', '/usr/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'])と./env/bin/python3 (['', '/home/user/test', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/user/test/env3/lib/python3.4/site-packages'])の間でPythonに違いが見られます。