Kompatibilität der Python-Versionen

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
Marvin75854

Hallo,

ich habe mal eine grundsätzliche Frage zur Kompatibilität der verschiedenen Versionen.

Ich habe unter Linux ein Programm in Python 2.6.6 geschrieben. Soweit ich das überblicken kann, habe ich hierfür nur die vorinstallierten Standardmodule verwendet. Python 2.x ist ja nicht mit Python 3.x kompatibel. Ist es theoretisch möglich zwei oder mehrere Python-Versionen zu installieren, sodass man im Zweifelsfall nur eine zusätzliche Python-Version installieren muss, anstelle den ganzen Code anzupassen?

Wie stellt sich die Kompatibilität der Python 2.x Versionen dar? Also wird mein Programm auch unter Python 2.4 oder Python 2.7 funktionieren?

Besten Dank

Gruß Marvin
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Man kann Programme schreiben, die ohne Änderung sowohl unter Python 2.7 als auch unter Python 3 laufen. Bei Python 2.4 und Python 3 ist das schon schwieriger, wenn Du aber nur Python 2.4-Features benutzt, sollte es kein Problem sein, das auch mit einer neueren Python 2.x-Version auszuführen.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Grundsaetzlich kannst du verschiedene Versionen parallel betreiben. Ggf. sind dann Kleinigkeiten wie die Standard-Assoziierung der .py-Endung unter Windows zu beachten etc, aber Python selbst kommt sich nicht in die Quere.

Und 2.6 vs 2.7 sollte kein Problem darstellen. 2.4 hingegen ist schon fast kompostiert, und zwischen 2.4 und 2.5 waren grosse Aenderungen (ich GLAUBE Dekoratoren, aber genau weiss ich das nicht mehr), da musst du mit grossen Problemen rechnen. Generell gilt: abwaertskompatibilitaet ist halbwegs ok zwischen 2.x und 3.x. Aufwaertskompatibilitaet ist nicht anzunehmen. Wie soll das auch gehen?
Marvin75854

Ok verstehe. Also ich gehe davon aus, dass das Programm mit der selben Linux Version und damit ja auch der selben Python Version betrieben wird.

Verhält sich das ganze unter Windows gleich wie unter Linux? Ich gehe mal davon aus, dass man sich dafür einen compiler runterladen muss oder das ganze irgendwie über die Konsole startet?

Ich arbeite nicht an meinem Privatrechner und kann hier nichts installieren. Deshalb war ich quasi gezwungen Python 2.6 zu verwenden. Da ich das Programm selbst nicht verwenden werde, schreibe ich gerade eine Anleitung und versuche dafür halt auch irgendwie abzuschätzen was auf den Nutzer zukommt, wenn vielleicht in zwei Jahren eine neue Linux Version und damit eine neuere Python Version installiert wird.
Benutzeravatar
__blackjack__
User
Beiträge: 13073
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Marvin75854: Die aktuelle Python 2-Version ist ja die 2.7. Da würde ich keine Probleme mit einem Programm erwarten das für 2.6 geschrieben wurde. Von 2.6/2.7 zu 3.x gibt es mehr Änderungen, die absichtlich nicht kompatibel sind. Der grosse Versionssprung wurde genutzt um mal ordentlich aufzuräumen.

Wie Sirius3 schon schrieb, kann man Quelltext schreiben, der sowohl unter Python 2 als auch Python 3 läuft. Man muss sich dann auf die Gemeinsamkeiten beschränken, und an ein paar Stellen explizit um Unterschiede herum programmieren. Es gibt Bibliotheken die dabei helfen. `six` und `future`, um die beiden bekanntesten zu nennen.

Allerdings würde ich da nicht Python 2.6 als Ausgangspunkt nehmen, sondern 2.7.

Unter Windows verhält sich das im Grunde gleich, nur das der Startmechanismus etwas anders ist als unter Linux. Bei Linux ist die Dateiendung egal, die She-Bang-Zeile entscheidet womit genau das Programm ausgeführt wird. Unter Windows entscheidet das die Dateiendung und man kann nur ein Programm mit einer Dateiendung verknüpfen. Darum gibt es in aktuellen Python-Versionen ``py.exe`` mit der man `*.py`-Dateien verknüpfen kann, und die ``py.exe`` entscheidet dann aufgrund der ersten Zeile so ähnlich wie Linux mit welchem installierten Python das Programm dann letztendlich ausgeführt werden soll. Das sollte alles auch in der Python-Dokumentation stehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

@__deets__: @-Dekoratoren kamen wohl in 2.4. Mit 2.5 kamen u.a. Kontextmanager als Preview (ab 2.6 auch ohne __future__ import) und Konditionale "a If True else b" Ausdrücke. Das alleine dürfte schon reichen, um modernen Python-Code oft unter Version 2.4 und älter nicht mehr unmittelbar ausführen zu können.

https://www.python.org/download/release ... ighlights/
Marvin75854

ja von "future" habe ich schon mal gehört. Da ich aber von 0 angefangen habe, fehlte mir für sowas einfach der Überblick. Jetzt nochmal alles ändern ist zeitlich absolut ausgeschlossen. Aber gut jetzt ist der Code in 2.6.6 und wenn die Versionen parallel funktionieren, sollte das kein Problem darstellen, denke ich.

Perfekt. Habe es jetzt auch mal am privaten Rechner unter Windows getestet. Musste noch den Path im Registrierungs-Editor anpassen, aber dann hat es wunderbar geklappt.

Vielen Dank
Antworten