Ich arbeite in einer Umgebung, wo sehr viele Python-Shellapplikationen auf einem zentralen CentOS Linux "Management"-Host von dutzenden von Leuten täglich verwendet werden, die jedoch Python-Technisch zum großen Teil als "Anwender" einzustufen sind. Es können zwar viele Python aber eben nicht alle; aus diesem und anderen Gründen ist unser Anspruch, dass ein Python-Script ohne spezielle Vorbereitung nur anhand der Shebang aufrufbar ist.
Derzeit befindet sich auf diesem Server nur ein Python 2.6.6 . Ohne das "was ist besser: 3 oder 2?" - Fass hier mal wieder aufmachen zu wollen: Ich hätte gerne drei Python Versionen auf dem System, zwischen dem sich der Entwickler entscheiden können soll:
- aktuell verwendete 2.6.6 (einfach, weil diese aus dem Repo des stark verwurzelten Systems kommt und da inzwischen etliche Sonderlocken eingeflossen sind, als Kompatibilitätssicherung/Fallback)
- die aktuell neueste 2.7.13
- die aktuellste 3.6.1 für die zukunftssichere Entwicklung neuer Skripte auch nach 2020
Da man einen Tanker nur schwer wendet, würde ich die bisher verwendete Version 2.6.6 weiterhin als "Standard-Python" gesetzt lassen (also auch: /usr/bin/python).
Die anderen beiden würde ich gerne geneigten Entwicklern zusätzlich zur Verfügung stellen. Es ist jedoch oberste Priorität, das diese in keiner Form das bisherige Verhalten stören. Auch darf es für den Anwender keine zusätzlichen Schritte geben, wie z.B. mit anaconda o.ä. erstmal ein Environment aktivieren zu müssen oder ähnliches. Auch darf eine Modulinstallation aus dem CentOS Repo die manuell installierten Versionen nicht "stören"; anders herum darf eine Installation von Modulen aus etwa dem PIP dieser neuen Versionen die ältere 2.6.6 durcheinander bringen.
Ich hätte gerne einfach nur die 2.7.13 und 3.6.1 irgendwo liegen (etwa: /opt/python_2.7.13 und /opt/python_3.6.1). Entwickler sollen nach möglichkeit nur über die Shebang definieren müssen welches Python sie gerne verwenden würden und feddich. Die Anwender sollen, egal welches Python zugrunde liegt, immer jedes Script einfach per "./script.py" o.ä. aufrufen können; weder ein Environment-Switch noch ein vorangestellter Interpreter (z.B. /opt/python_3.6.1/bin/python script.py) darf notwendig sein.
/usr/bin/python und /usr/bin/python2 blieben dabei Python 2.6.6
/usr/bin/python27 wäre - logisch - Python 2.7.13
/usr/bin/python3 wäre Python 3.6.1
Stelle ich mir das alles zu einfach vor, oder geht das wirklich so einfach?
Gibt es irgendwelche Stolperfallen, wo sich mehrere verschiedene Versionen auf einem System in die Quere kommen?
Was halt auf garkeinen Fall passieren darf ist, das die bisherigen Scripte in Ihrer Funktionsfähigkeit beeinflusst werden oder das es gar zu einfach ist die Interpreter durcheinander zu bringen (weil man z.B. dauernd verwechselt das ein Modul eigentlich für 3.6.1 installiert wurde, nun wurde es jedoch blöderweise in 2.6.6 aktualisiert oder anders herum).
LG