Python Parallelbetrieb für Seafile

Die „File Sync and Share“ Lösung Seafile, die zum Austausch von Daten über beliebige Endgeräte als Private Cloud betrieben werden kann, basiert zum Teil auf Python. Die verwendeten Seafile Skripte benötigen Python2. Die beiden Python Versionen 2.x und 3.x sind untereinander jedoch nicht kompatibel, können aber im Parallelbetrieb eingesetzt werden. Je nach Linux Distribution wird jetzt eine bestimmte Version angesprochen, wenn ein Python Skript mit „python ./foo.py“ ausgeführt wird. Das muss natürlich nicht immer die richtige Version sein. Im Falle von Seafile kann es also zu Problemen kommen, wenn Python3 die Standardversion ist.

Hierbei können Fehlermeldungen bei der Ausführung von Skripten kommen.

Python Parallelbetrieb

Natürlich könnte man jetzt die entsprechenden Skripte so anpassen, dass immer Python2 aufgerufen wird. Das ist jedoch nicht zielführend sondern eher eine ziemliche Pfuscherei. Vor allem müssten die Änderungen nach jedem Seafile Update durchgeführt werden. Welches die gesetzte Standardversion ist, lässt sich ganz leicht in einem Terminal prüfen.

python --version

Python Parallelbetrieb

Wenn hier als Ergebnis „Python 2.x.x“ erscheint, wird es zumindest mit Seafile keine Probleme geben, da Python2 die Standardversion ist. Wenn „Python 3.x.x“ erscheint, lässt sich durch ein simples Shell Skript jedes Python Skript aus einem bestimmten Pfad mit Python2 starten, ohne dass die jeweiligen Python Skripte angepasst werden müssen. Genauso kann das Skript für den umgekehrten Fall verwendet werden. Das zu erstellende Skript liegt unter „/usr/local/bin/python“

sudo nano /usr/local/bin/python
#!/bin/bash

script=$(readlink -f -- "$1")

case "$script" in (/home/seafile /*)

    exec python2 "$@"
    ;;

esac

exec python3 "$@"

Der Pfad „/home/seafile/“ muss an die eigene Seafile Installation angepasst werden. Wenn es noch weitere Python2 Projekte gibt, die berücksichtigt werden sollen, kann der Pfad beliebig erweitert werden. Die Pfade werden durch ein „|“ getrennt. „(/home/seafile /*|/path/to/python/*|)“. Das Skript muss nachträglich noch ausführbar gemacht werden.

sudo chmod +x /usr/local/bin/python

Ab jetzt werden alle Skripte im angegebenen Verzeichnis berücksichtigt und mit der richtigen Python Version ausgeführt. Somit ist ein relativ einfacher Python Parallelbetrieb der beiden Versionen möglich.

Quelle: https://wiki.archlinux.org/index.php/Python#Dealing_with_version_problem_in_build_scripts

Ähnliche Beiträge:

Kommentare sind geschlossen.