Kolumne, UTC

Python 3.5 und PyQt5

Aktualisierung meiner virtuellen Umgebung für F&E

Weiterführend zu meinem Artikel über den Aufbau einer kombinierten virtuellen Umgebung für Python und Node.js mit Benutzerrechten unter Linux erkläre ich in diesem Artikel, worin die wesentlichsten Unterschiede zum Aufbau einer aktuell(er)en Umgebung bestehen. Anstelle von CPython 3.4 kommt CPython 3.5 zum Einsatz. PqQt4 wird durch PyQt5 abgelöst, was den Bau der Umgebung wesentlich vereinfacht. Als Unterbau dient wie zuvor wieder openSUSE 13.1 Linux in seinen Varianten für 32-Bit- und 64-Bit-x86-Architekturen. Dieser Artikel richtet sich an fortgeschrittene Nutzer, die mit dem Umgang mit Linux und einer Kommandozeile vertraut sind.

In: Datenanalyse, Softwareentwicklung, Python, Python 3, Node.js, virtualenv, nodeenv, PyQt, PyQt5, JavaScript, Linux
 

Warum sich eine Aktualisierung lohnt

Obwohl die Unterschiede zwischen CPython 3.4 und 3.5 relativ überschaubar sind und es sich für mich alleine deswegen nicht lohnt, auf eine neuere Version zu aktualisieren, macht es doch Sinn, einen Blick auf neue Bibliotheken wie PyQt5 zu riskieren und dabei auch den Unterbau vollständig zu aktualisieren. Da je nach verfolgter Projekt- oder Firmen-Philosophie in einigen Umgebungen immer die aktuellsten Softwarepakete verwendet werden, was vor allem die Interpreter von Sprachen, "Compiler" (Übersetzer) und Bibliotheken betrifft, lässt es sich für mich nicht vermeiden, immer eine virtuelle Umgebung mit der aktuellsten Software bereit zu halten, so dass es eigentlich keiner direkten Motivation für diese Prozedur bedarf. Mit Bezug auf Qt ist mir dieses Vorgehen (und Problem) in letzter Zeit vor allem im Bereich Geoinformationssysteme begegnet, was doch überrascht, da ich hier etwas mehr Interesse in Langlebigkeit und Stabilität von Software und damit ältere, etablierte Versionen erwartet hätte.

Voraussetzungen

Zuallererst sollte wie gehabt sicher gestellt werden, dass das Betriebssystem alle Abhängigkeiten (Werkzeuge, Bibliotheken, "Header") befriedigt. Unter openSUSE sollten die Schemata ("patterns") "patterns_openSUSE-devel_basis" und "patterns_openSUSE-devel_C_C++" installiert sein. Darüber hinaus sollte sicher gestellt werden, dass eine Version von readline (5 oder 6) sowie das dafür entsprechenden Entwicklungspaket (readline-devel) installiert ist - sonst beschwert sich der Python-Interpreter später beim Start.

1 sudo zypper in patterns_openSUSE-devel_basis \
2 	patterns_openSUSE-devel_C_C++ openssl libopenssl-devel \
3 	readline readline-devel
Voraussetzungen 1: Installation von Systemabhängigkeiten mit administrativen Privilegien aus einer Kommandozeile

Die Nutzung von Qt5 stellt zumindest unter openSUSE 13.1 ein kleineres Hindernis dar, da diese Bibliothek zum Zeitpunkt der Veröffentlichung dieser Version von openSUSE weder besonders ausgereift noch verbreitet war. Entsprechend finden sich im Hauptrepositorium nur Pakete für vereinzelte Komponenten von Qt 5.1. Aus diesem Grund benutze ich ich stattdessen Pakete aus einem Gemeinschaftsrepositorium, um so in den Genuss von Qt 5.4.2 zu kommen. Bei den folgenden Schritten ist es wichtig, die Priorität des durch Zypper hinzugefügten Repositoriums richtig zu setzen, da sonst veraltete Pakete installiert werden können. Zur Illustration verwende ich Priorität 98, die nur einen Schritt über dem Standard von 99 liegt. Diese Zahl sollte den eigenen Präferenzen sowie der jeweiligen Systemkonfiguration entsprechend angepasst werden. Durch die nicht offiziell unterstützte Installation von Qt5 aus den Gemeinschaftsrepositorium von openSUSE wird tief in das System eingegriffen, wodurch das Risiko besteht, das System nachhaltig zu beschädigen. Die Durchführung dieses Schrittes erfolgt daher ausdrücklich auf eigene Gefahr.

1 sudo zypper ar -f \
2 	http://download.opensuse.org/repositories/KDE:/Qt5/openSUSE_13.1/ _qt5
3 sudo zypper mr -p 98 _qt5
4 sudo zypper in libQt5Gui-devel libQt5DBus5 libQt5Xml5 libQt5Core5 \
5 	libqt5-qtbase-platformtheme-gtk2 libQt5XmlPatterns5 \
6 	libQt5Core-devel libQt5Gui5 libQt5Network5 \
7 	libqt5-qtbase-common-devel libqt5-qtimageformats \
8 	libQt5Xml-devel
Voraussetzungen 2: Installation von Qt 5.4.2 mit administrativen Privilegien aus einer Kommandozeile
Durchführung

Anders als der Titel dieses Artikels vielleicht suggeriert, geht es hier nicht direkt um eine klassische Aktualisierung einzelner Komponenten sondern um den vollständigen Neuaufbau einer virtuellen Umgebung. Alle Schritte und Prinzipien orientieren sich an denen in meinem älteren Artikel über den Aufbau einer kombinierten virtuellen Umgebung für Python und Node.js mit Benutzerrechten unter Linux. So kommt beispielsweise auch wieder nodeenv zum Einsatz, um Node.js zu installieren. Ebenso dient wieder mein Projektverzeichnis auf dem Desktop aus Ausgangsbasis.

1 cd ~/Desktop/PROJEKTE
Schritt 1: In den Projektordner wechseln

Bei der Übersetzung und Installation des CPython-Interpreters von python.org ändert sich im Prinzip nichts.

1 wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz
2 tar xpvf Python-3.5.1.tar.xz
3 mv Python-3.5.1 src.Python-3.5.1
4 mkdir _python35
5 cd src.Python-3.5.1
6 ./configure --prefix=$HOME/Desktop/PROJEKTE/_python35
7 make
8 make install
9 cd ..
Schritt 2: Python herunterladen, konfigurieren, übersetzen und installieren

Als nächstes erstelle ich eine neue virtuelle Umgebung. Auch hier ändert sich nichts an der Vorgehensweise. Hervorzuheben sind die Aktualisierung von pip sowie der etwas untypische aber sehr praktische Link auf die Python-Header. Für alle weitere Schritte sollte an dieser Stelle nicht vergessen werden, die virtuelle Umgebung mit "source" auch zu aktivieren.

1 mkdir _env35a
2 cd _python35
3 ./bin/python3.5 -m venv ../_env35a/
4 cd ..
5 source _env35a/bin/activate
6 pip install --upgrade pip
7 cd _env35a/include/
8 ln -s ../../_python35/include/python3.5m/ python3.5m
9 cd ../../
Schritt 3: Eine neue virtuelle Umgebung erstellen und aktivieren

Anders als anfänglich erwartet gestaltet sich die Installation von PyQt5 deutlich einfacher als die Installation von PyQt4. Die manuelle Anpassung des "Makefiles" ist nicht mehr notwendig. Genauso wie zuvor muss jedoch wieder zuerst SIP installiert werden. Da ich in diesem Fall die aktuellste Version von PyQt installiere, brauche ich nicht lange nach einer dazu passenden Version von SIP zu suchen - ich wähle hier auch einfach die aktuellste. Mein funktionierendes Paar von SIP und PyQt setzt sich damit aus sip-4.18 und PyQt5_gpl-5.6 zusammen und baut auf Qt 5.4.2 aus den Gemeinschaftsrepositorien von openSUSE auf.

1 wget http://sourceforge.net/projects/pyqt/files/sip/sip-4.18/sip-4.18.tar.gz
2 tar -xvzf sip-4.18.tar.gz
3 mv sip-4.18 src.sip-4.18
4 cd src.sip-4.18
5 python configure.py --incdir=/home/ernst/Desktop/PROJEKTE/_env35a/include/python3.5m/
6 make
7 make install
8 cd ..
Schritt 4: SIP herunterladen, konfigurieren, übersetzen und installieren

Nachdem dies abgeschlossen ist, kann ich ohne Probleme PyQt installieren. Da auf meinem System Qt4 als Standard verwendet wird, muss ich bei der Konfiguration des Quelltextes manuell auf qmake für Qt5 zeigen. Ähnlich wie bei PyQt4 kann dieser Schritt selbst auf einem schnellen Rechner einige Zeit in Anspruch nehmen.

1 wget http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.6/PyQt5_gpl-5.6.tar.gz
2 tar -xvzf PyQt5_gpl-5.6.tar.gz
3 mv PyQt5_gpl-5.6 src.PyQt5_gpl-5.6
4 cd src.PyQt5_gpl-5.6
5 python configure.py --qmake /usr/bin/qmake-qt5
6 # Lizenz akzeptieren mit "yes"
7 make
8 make install
9 cd ..
Schritt 5: PyQt5 herunterladen, konfigurieren, übersetzen und installieren

Jetzt ist es möglich, weitere Python-Pakete, insbesondere solche mit Abhängigkeit zu Qt, zu installieren.

1 pip install -v numpy
2 pip install -v matplotlib
3 pip install -v h5py
4 pip install -v pymongo
Schritt 6: Weitere Python-Pakete installieren

Zuletzt wird mit Hilfe von nodeenv Node.js installiert.

1 pip install -v nodeenv
2 nodeenv -p
Schritt 7: Nodeenv und Node.js installieren

Sebastian M. Ernst