Soll ich # setzen! (Shebang) in Python-Skripten, und welche Form sollte es nehmen?



Answers

Es ist wirklich nur eine Frage des Geschmacks. Das Hinzufügen des Shebang bedeutet, dass Leute das Skript direkt aufrufen können, wenn sie möchten (vorausgesetzt, es ist als ausführbar markiert); es weglassen bedeutet nur, dass python manuell aufgerufen werden muss.

Das Endergebnis der Ausführung des Programms ist in keiner Weise beeinträchtigt. es sind nur Möglichkeiten der Mittel.

Question

Soll ich den Shebang in meine Python-Skripte einfügen? In welcher Form?

#!/usr/bin/env python 

oder

#!/usr/local/bin/python

Sind diese gleich tragbar? Welche Form wird am häufigsten verwendet?

Hinweis: Das tornado Projekt verwendet den Shebang. Auf der anderen Seite nicht das Django Projekt.




Antwort: Nur wenn Sie beabsichtigen, ein ausführbares Skript für die Befehlszeile zu erstellen.

Hier ist das Verfahren:

Beginnen Sie mit der Überprüfung der richtigen zu verwendenden Shebang-Zeichenfolge:

which python

Nimm die Ausgabe davon und füge sie (mit dem Shebang #!) In die erste Zeile ein.

Auf meinem System reagiert es so:

$which python
/usr/bin/python

So wird dein Shebang aussehen:

#!/usr/bin/python

Nach dem Speichern läuft es immer noch wie zuvor, da Python diese erste Zeile als Kommentar sehen wird.

python filename.py

Um es zu einem Befehl zu machen, kopieren Sie es, um die Erweiterung .py zu löschen.

cp filename.py filename

Sagen Sie dem Dateisystem, dass dies ausführbar sein wird:

chmod +x filename

Um es zu testen, verwenden Sie:

./filename

Bewährtes Verfahren ist es, es irgendwo in Ihrem $ PATH zu verschieben, so dass Sie nur den Dateinamen selbst eingeben müssen.

sudo cp filename /usr/sbin

So funktioniert es überall (ohne ./ vor dem Dateinamen)




Benutze zuerst

which python

Dies gibt die Ausgabe als den Ort, an dem mein Python-Interpreter (binär) vorhanden ist.

Dieser Ausgang könnte irgendein wie sein

/usr/bin/python

oder

/bin/python

Wählen Sie nun die Shebang-Linie entsprechend aus und verwenden Sie sie.

Zur Verallgemeinerung können wir verwenden:

#!/usr/bin/env

oder

#!/bin/env



Der Zweck von shebang besteht darin, dass das Skript den Interpretertyp erkennt, wenn Sie das Skript über die Shell ausführen möchten. Meistens, und nicht immer, führen Sie Skripte aus, indem Sie den Interpreter extern bereitstellen. Beispielverwendung: python-xx script.py

Dies funktioniert auch, wenn Sie keinen Shebang-Deklarator haben.

Warum die erste "tragbarer" ist, liegt daran, dass /usr/bin/env Ihre PATH Deklaration enthält, die alle Ziele berücksichtigt, an denen sich Ihre ausführbaren Systemdateien befinden.

HINWEIS: Tornado verwendet keine Shebangs und Django strikt nicht. Es hängt davon ab, wie Sie die Hauptfunktion Ihrer Anwendung ausführen.

AUCH: Es variiert nicht mit Python.




Wenn Sie mehr als eine Version von Python haben und das Skript unter einer bestimmten Version ausgeführt werden muss, kann die she-bang sicherstellen, dass die richtige verwendet wird, wenn das Skript direkt ausgeführt wird, zum Beispiel:

#!/usr/bin/python2.7

Beachten Sie, dass das Skript weiterhin über eine vollständige Python-Befehlszeile oder über den Import ausgeführt werden kann. In diesem Fall wird der She-Bang ignoriert. Aber für Skripts, die direkt ausgeführt werden, ist dies ein guter Grund, den Shebang zu verwenden.

#!/usr/bin/env python ist im Allgemeinen der bessere Ansatz, aber dies hilft bei speziellen Fällen.

Normalerweise wäre es besser, eine virtuelle Python-Umgebung einzurichten. In diesem Fall würde das generische #!/usr/bin/env python die korrekte Instanz von Python für den virtualenv identifizieren.




Related