web-dev-qa-db-ja.com

#!/ usr / bin / python3の目的

いくつかのスクリプト言語でこれに気付きましたが、この例ではpythonを使用しています。多くのチュートリアルでは、最初の行は#!/usr/bin/python3で始まります。なぜこれがあるのか​​分かりません。

  • オペレーティングシステムは、それがpythonスクリプトであることを知らないはずです(明らかに、参照しているのでインストールされています)
  • ユーザーがUNIXベースではないオペレーティングシステムを使用している場合
  • 言語は、何らかの理由で別のフォルダーにインストールされます
  • ユーザーのバージョンが異なります。特に、それが完全なバージョン番号でない場合(Python3とPython32のように)

どちらかといえば、上記の理由によりpythonスクリプトが壊れていることがわかりました。

123
KayleL

#!/usr/bin/python3シェバンラインです。

シェバン行は、インタープリターの場所を定義します。この場合、python3インタープリターは/usr/bin/python3にあります。シバン行は、bashRubyPerl、またはその他のスクリプト言語のインタープリター(例:#!/bin/bash)である場合もあります。

Shebang行がないと、スクリプトに実行フラグを設定して./script.pyのように実行しても、オペレーティングシステムはpythonスクリプトであることを認識しません。 python3でスクリプトをデフォルトで実行するには、python3 script.pyとしてスクリプトを呼び出すか、Shebang行を設定します。

言語インタープリターが異なる場所にインストールされている場合、異なるシステム間での移植性のために#!/usr/bin/env python3を使用できます。

203
Jin

それはハッシュバンと呼ばれます。シェルからスクリプトを実行する場合、最初の行を調べて、スクリプトを解釈するためにどのプログラムを開始する必要があるかを判断します。

非UnixベースのOSは、独自のルールを使用して、スクリプトの実行方法を決定します。たとえば、Windowsはファイル名拡張子を使用し、#を使用すると、最初の行がコメントとして扱われます。

Python実行可能ファイルへのパスが間違っていると、当然スクリプトは失敗します。標準の規則で指定された場所から実際の実行可能ファイルへのリンクを簡単に作成できます。

19
Mark Ransom

この行は、スクリプトを実行するプログラム実行可能ファイルを見つけるのに役立ちます。このShebang表記は、ほとんどのスクリプト言語でかなり標準的です(少なくとも、成長したオペレーティングシステムで使用されているように)。

この行の重要な側面は、whichインタープリターが使用されることを指定することです。たとえば、多くの開発中心のLinuxディストリビューションでは、pythonの複数のバージョンが同時にインストールされるのが普通です。

Python 2.xとPython 3は100%の互換性がないため、この違いは非常に重要です。したがって、#! /usr/bin/python#! /usr/bin/python3は同じではありません(また、このページの別の場所に記載されている#! /usr/bin/env python3とまったく同じでもありません。

10
zxq9
  1. そして、この行はhowです。

  2. 無視されます。

  3. 実行に失敗するため、適切な場所を指すように変更する必要があります。またはenvを使用する必要があります。

  4. 実行に失敗し、おそらく別のバージョンでの実行に失敗します。

.7 Python doc から、Shebang行がウィンドウに対してどのように機能するかを明確にするため:

  • スクリプトファイルの最初の行が#!で始まる場合、「Shebang」行として知られています。 Linuxおよび他のUnixのようなオペレーティングシステムは、このような行をネイティブでサポートしており、スクリプトの実行方法を示すためにそのようなシステムで一般的に使用されます。
  • WindowsのPython Launcherを使用すると、WindowsのPythonスクリプトで同じ機能を使用できます。
  • PythonスクリプトのShebang行をUnixとWindowsの間で移植できるようにするために、ランチャーは、使用するインタープリターを指定する多数の「仮想」コマンドをサポートしています。サポートされている仮想コマンドは次のとおりです。
    • / usr/bin/env python
      • Shebangラインの/ usr/bin/env形式には、さらに1つの特別なプロパティがあります。インストール済みのPythonインタープリターを探す前に、このフォームはPython実行可能ファイルの実行可能PATHを検索します。これは、PATH検索を実行するUnix envプログラムの動作に対応しています。
    • / usr/bin/python
    • / usr/local/bin/python
    • python
2
boardtc

実際、ファイルがどのタイプのファイルであるかを判断することは非常に複雑であるため、オペレーティングシステムはこれを知ることができません。それに基づいて多くの推測を行うことができます-

  • 拡張
  • UTI
  • MIME

しかし、コマンドラインはそのすべてに煩わされません。なぜなら、その派手なナンセンスは何の意味もなかったので、限られた下位互換性のあるレイヤーで実行されるからです。確かにダブルクリックすると、最新のOSはそれを理解できますが、端末から実行する場合は、端末は派手なOS固有のファイル入力APIを気にしないので、いいえです。

他の点に関して。便利で、同様に実行できます

python3 path/to/your/script

pythonが指定されたパスにない場合、機能しませんが、この機能を有効にするためのものをインストールする傾向があります。 * nixの下にあるかどうかは実際には関係ありません。shellcodeであるため、この行を検討するかどうかはシェル次第です。たとえば、Windowsでbashを実行できます。

実際には、この行を完全に省略できます。これは、呼び出し元がインタープリターを指定する必要があることを意味します。また、通訳者を非標準の場所に置いてから、通訳者を用意せずにスクリプトを呼び出そうとしないでください。

1
awiebe