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
Kompatibilität der Python-Versionen
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.
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?
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?
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.
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.
- __blackjack__
- User
- Beiträge: 13100
- 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.
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
@__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/
https://www.python.org/download/release ... ighlights/
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
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