Aus irgendeinem Grund wird das Flag -O
(optimiert) in der Shebang-Zeile auf einem Red Hat Enterprise Server (Version 5.3), auf den ich zugreife, nicht erkannt. Auf anderen Systemen wird das Flag ohne Probleme erkannt.
Das Ausführen des folgenden Skripts unter OS X funktioniert einwandfrei. Die Erkennung des -O
-Flags kann verifiziert werden, weil es (wenn nicht vorhanden) aktiviert oder deaktiviert (wenn angegeben), was unter der Bedingung if __debug__
steht:
Das Ausführen desselben Skripts im RHE-System führt zu:
/ usr / bin / env: python -O: Keine solche Datei oder Verzeichnis
Ohne das Flag -O
wird das Skript normal auf dem RHE-System ausgeführt (d. h. die integrierte Variable __debug__
wird auf True
gesetzt).
Gibt es einen plattformübergreifenden Weg, um dieses Problem zu beheben? Gibt es sogar eine plattformspezifische Möglichkeit, das Problem von Flags in der Shebang-Zeile mit dem Python-Interpreter zu beheben?
Bearbeiten: Auch andere Problemumgehungen zum Setzen der __debug__
-Variable (ohne Verwendung von shebang-Flags) für Interpreter-weit wären ebenfalls interessant.
Wie wäre es mit einem kleinen Shell-Skript:
pythono :
%Vor%Dann ändern Sie Ihr Skript zu verwenden:
%Vor% Beachten Sie auch, dass das Festlegen der Umgebungsvariablen PYTHONOPTIMIZE
auf eine nicht leere Zeichenfolge die gleiche ist wie die Verwendung des Flags -O
. Von der man python
man-Seite:
Einige Systeme erlauben nicht mehrere Argumente in einer #!
-style Zeile. Der "env hack" ist auf keinen Fall ein offiziell empfohlener Weg, um das Pfadproblem zu lösen - der beste Weg, damit umzugehen, ist, die #!
-Zeile der Installation so umschreiben zu lassen, dass sie auf /bin/python
, /usr/bin/python
, as verweist passend für das System.
Ändere den Shebang zu:
%Vor% Dies setzt natürlich voraus, dass der Python-Interpreter als /usr/bin/python
installiert ist; Ansonsten passen Sie sie nach Bedarf an.
Siehe auch diese Frage und meine Antwort darauf .
Wenn Sie #!/usr/bin/env
weiterhin verwenden möchten, können Sie die Fakten nutzen, die
python
hat Umgebungsvariablen für seine Befehlszeilenoptionen env
können Umgebungsvariablen vor dem Ausführen des Befehls Wenn Sie diese zusammenfügen, erhalten Sie die folgende Lösung:
#!/usr/bin/env PYTHONOPTIMIZE=1 python
Sie haben nach "plattformübergreifend" gefragt. Dies funktioniert nur für Unix (z. B. Linux, OS X usw.). Ich kann nicht für Windows sprechen. Ich würde erwarten, dass dies auch unter cygwin
funktioniert, aber YMMV.