#!/ usr / bin / python3の目的


160

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

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

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



9
私はシバン文字列をコピーするためだけにこの質問に行きます。
omerjerk

回答:


260

#!/usr/bin/python3あるシェバング行は

シバン行は、インタープリターが配置される場所を定義します。この場合、python3インタープリターはにあり/usr/bin/python3ます。シェバングラインも可能性がありbashrubyperlまたは任意の他のスクリプト言語インタプリタ、例えば:#!/bin/bash

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

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


8
だから#! /usr/bin/env python3選ばれるべき#! /usr/bin/python3ですか?
winklerrr

3
@winklerrrはい、より広く使用されています。
MerreM

20

それはハッシュバンと呼ばれます。シェルからスクリプトを実行すると、最初の行が検査され、スクリプトを解釈するためにどのプログラムを開始する必要があるかがわかります。

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

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


12

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

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

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


6
  1. そして、この行はどのようにです。

  2. 無視されます。

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

  4. 実行に失敗し、おそらく異なるバージョンでの実行に失敗するでしょう。


3

ウィンドウのシバン行がどのように機能するかを明確にするには、3.7 Pythonドキュメントから

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

2

実際には、ファイルの種類の決定はファイルが非常に複雑であるため、今ではオペレーティングシステムだけでは認識できません。それはに基づいて多くの推測をすることができます-

  • 拡張
  • UTI
  • MIME

しかし、コマンドラインはこれらすべてに悩まされることはありません。これは、限定的な下位互換性のあるレイヤーで実行されるためです。ダブルクリックすると、最新のOSでそれを理解できますが、ターミナルから実行する場合は、ターミナルは高度なOS固有のファイルタイプAPIを気にしないため、そうではありません。

その他の点について。便利です、同じように実行できます

python3 path/to/your/script

Pythonが指定されたパスにない場合は機能しませんが、このようなものを作成するためにインストールする傾向があり、逆ではありません。* nixを使用しているかどうかは実際には問題ではありません。この行を考慮するかどうかは、シェル次第です。shellcode。です。たとえばbash、Windowsで実行できます。

この行は完全に省略できます。つまり、呼び出し側がインタープリターを指定する必要があるだけです。また、インタープリターを非標準の場所に置かず、インタープリターを提供せずにスクリプトを呼び出そうとしないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.