best practice: Python Version prüfen >=3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
conloos
User
Beiträge: 22
Registriert: Freitag 23. November 2007, 09:54

Hallo @all,

ich arbeite an einem kleinen Projekt.
Auf meinem Betriebssystem ist Python 2 und 3 installiert.
Daher soll vor dem Start im "pre-flight-check" geprüft werden ob python3 zur Ausführung genutzt wird und anschließen wird der Rest gestartet.

Das Prüfen ist nicht das Problem, sondern ich benutze viel Python3 (type annotations und f-strings).
Wenn ich die Klassen lade, dann bekomme ich schon beim Import Exceptions falls python2 genutzt wird und ich die Python Version sauber abfragen kann.

Daher importiere ich die benötigten Klassen innerhalb der Funktionen die, die Umgebung prüfen.

Ich hatte schon überlegt den pre-flight-check in zwei Stufen aufzubauen und:
- in der ersten die Python Version zu prüfen und
- in der zweiten das restliche Environment.

Das gefällt mir nicht und deshalb meine Frage, wie man hier am besten vorgeht?


Gruß Frank
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

Vor ein paar Jahren wäre die Devise gewesen, die Programme als Python 2 mit Backports aus Python 3 zu schreiben, bzw. six oder modernizer zu nutzen. Das geht inzwischen aber alles in Richtung legathy, außer für über Jahre gewachsene große Projekte, die nicht so einfach zu portieren sind.

Da Du aber auch über Python 3 verfügst, stellt sich diese Aufgabe nicht mehr. Meine Empfehlung: verzichte auf irgendwelche "pre-flights". Schreibe für Python 3 und nimm Python 3 (>= 3.6, da Du f-Strings verwendest).
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Welche Python-Version verwendet wird entscheidet ja eigentlich die She-Bang-Zeile. Wer versucht das explizit mit Python 2 auszuführen merkt ja sehr schnell, dass das nicht funktioniert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

conloos hat geschrieben: Freitag 27. März 2020, 18:32 Das gefällt mir nicht und deshalb meine Frage, wie man hier am besten vorgeht?
Ich verstehe die Frage ansich nicht , denn entweder:
__blackjack__ hat geschrieben: Freitag 27. März 2020, 21:22 Welche Python-Version verwendet wird entscheidet ja eigentlich die She-Bang-Zeile.
oder ein Skript wird mit vorangestelltem Interpreter für Python 2 oder 3 gestartet.

Wozu also eine Abfrage welche Version, wenn nur ein und dann noch bekanntes System existiert und man Skripte entsprechend starten kann?
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Man könnte fieses Zeug anstellen.

Shebang startet Python2, Python 2 detektiert Python 3, Python 2 ersetzt seinen eigenen Prozess durch Python 3.
Wenn kein Python 3 auf der Maschine ist, kann natürlich auch kein Python 3 gestartet werden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und es fällt auch auf die Nase wenn kein Python 2 da ist. Unter Windows wäre das dann noch mal umständlicher wenn Python 3 installiert ist, *.py also mit der ``py.exe`` verknüpft ist, und die dann wegen dem She-Bang dann erst mal Python 2 startet, dass dann wiederum Python 3 startet – ich glaube mir wird gerade ein bisschen schwindelig. 😵
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten