Je nach System python
== python2
oder python
== python3
.
Ausführbare Python-Skripte, beginnt mit:
#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...
Für Python Py3K ist es in der Dokumentation enthalten. Ich sollte / kann es mit der Versionsnummer verwenden , also mache ich das:
#!/usr/bin/env python3
Aber ich habe ein Problem mit py2k-Skripten gefunden.
Während in py2k Dokumentation ist zu Verwendung geschrieben: #! /usr/bin/env python
,
auf einigen * nix-es ist python py3k standardmäßig, also python == python3. (Zum Beispiel ArchLinux-Python-Paket , hier Python-Paketdateien ).
Wie kann man Python-Skripte für die Verteilung verpacken (konfigurieren, erstellen) und / oder vorbereiten, um dies zu handhaben?
Ich frage nach Softwarepaketen, die von Benutzern einfach ausgeführt werden können (ohne ihre Umgebung zu verändern).
Kann ich für Python-Py2K-Skripte den gleichen Trick wie für Python-Py3K-Skripte ausführen und Folgendes festlegen : #!/usr/bin/env python2
? Kann ich sicher sein, dass jede Python-Py2K-Distribution eine python2
Datei enthält , die also #!/usr/bin/env python2
funktioniert?
Wenn ja, warum wird es nicht als Standard vorgeschlagen, beispielsweise in der Python Py2K-Dokumentation ?
quelle
python2
, um es auszuführen (falls es installiert ist), und Sie können immer die Version mit überprüfenpython -V
. Wenn Sie möchten, dasspython
dies 2 oder 3 ist, sollten Sierm /usr/bin/python
dann einen Symlink erstellen, der auf Ihre gewünschte Python-Version verweist, zln -s /usr/bin/python2.5 /usr/bin/python
.python2
. Ich frage mich, warum es nicht Standard ist, es zu verwenden, wenn es py2k und py3k gibt und die Standardeinstellungenpython
unterschiedlich sein können. Was ist mit Ihrem Rat zum Entfernen - es ist nicht richtig für dieses Beispiel, weil ich nach der Verpackung frage. Ich möchte ein Paket erstellen, das in verschiedenen Konfigurationen / Systemen ausgeführt werden kann. Keine Möglichkeit, die Umgebung zu ändern. Was ist mit der Überprüfung - es gilt nicht für Shebang - soweit ich weiß.#!...python2
in Ihren Programmen verwenden und wenn Sie Python 3.x verwenden, dann verwenden#!...python3
. Verlassen Sie sich nicht darauf, dass das Betriebssystem den richtigen Link hat, wenn Sie wissen, dass es nur mit einer bestimmten Version funktioniert. Ich arbeite mit Systemen, auf denen Python 1.5.2 noch installiert ist./usr/bin/python
Ich schreibe entweder Code, um ältere Python-Versionen zu verarbeiten, oder verwende ihnpython2
.python2
ausführbare Datei auf meinem System (Debian Squeeze).python
ist ein Symlink zupython2.6
undpython3
ist ein Symlink zupython3.1
, aber es gibt keinepython2
.Antworten:
Ein Skript kann seine Python-Version überprüfen und, wenn dies Python 3 ist, sich selbst mit Python 2 neu starten. Fügen Sie Folgendes am Kopf des Skripts hinzu:
Dies verwendet den
which
Befehl des Systems , umpython2
in der Umgebung zu suchenPATH
. Es startet sich dann neu damit (oder bricht ab, wenn es nicht gefunden werden kann).Beachten Sie, dass das Skript eine gültige Python 3-Syntax haben muss, damit es in Python 3 gestartet werden kann.
Außerdem sollte jede Ausgabe vor dem
execv
Anruf geleert werden, da sie sonst verloren geht. Wenn Sie beispielsweisesys.stdout.flush()
kurz vor dem Aufruf vonexecv
hinzufügen, werden alleprint
Anweisungen gelöscht .quelle
Bei älteren Versionen kann es nur
python
statt gebenpython2
. Um Ihre Sheebang-Linie klarer zu machen, können Sie einen Link erstellenpython2 -> python
, den Sie verwenden können#!/usr/bin/env python2
.quelle
Ich denke, der "Standard" ist in https://www.python.org/dev/peps/pep-0394/ definiert.
quelle