Wer endlich mal die alten Zöpfe der Python-Entwicklung abschneiden möchte sollte seine Projekte so langsam auf Python 3.x umstellen. CentOS 7 bringt per default Python in der Version 2.7.5 mit. Wer auf eine aktuelle Version von Python wechseln möchten kann dies trotzdem ohne Probleme auch unter CentOS 7.
Dieses Tutorial zeigt wie man unter CentOS 7 Python 3.5 optional installiert. Die gezeigte Lösung kann auch ohne Probleme für Python 3.4 angewendet werden.
Vorraussetzung für die Installation von Python 3.5 ist eine lauffähige CentOS 7 Installation. Die Installation von Python 3.5 erfolgt aus dem IUS-Repository. Wie dies eingebunden wird habe ich schon in dem Tutorial IUS Repo installieren gezeigt, daher wird dies hier nur ganz kurz erklärt.
Einbinden des IUS-Repositorys
Der Vorteil der Installation von Python 3.5 aus dem Repository gegenüber der „selbstgebauten Version“ ist, dass wir regelmäßig Updates aus dem Repo erhalten. Eine manuelle Pflege der Installation ist also nicht mehr nötig.
Mit folgenden Befehl binden wir das IUS-Repository ein.
yum install https://centos7.iuscommunity.org/ius-release.rpm
Nachdem die Installation abgeschlossen ist können wir uns die optional verfügbaren Python-Versionen anschauen.
yum search python3 | grep '\<python3.u\>'
python34u-debuginfo.x86_64 : Debug information for package python34u python35u-debuginfo.x86_64 : Debug information for package python35u python34u.x86_64 : Version 3 of the Python programming language aka Python 3000 python34u-debug.x86_64 : Debug version of the Python 3 runtime python34u-devel.x86_64 : Libraries and header files needed for Python 3 python34u-libs.x86_64 : Python 3 runtime libraries python34u-pip.noarch : A tool for installing and managing Python 3.4 packages python34u-redis.noarch : Python client for Redis key-value store python34u-setuptools.noarch : Easily build and distribute Python 3.4 packages python34u-test.x86_64 : The test modules from the main python 3 package python34u-tkinter.x86_64 : A GUI toolkit for Python 3 python34u-tools.x86_64 : A collection of tools included with Python 3 python34u-wheel.noarch : A built-package format for Python 3.4 python35u.x86_64 : Version 3 of the Python programming language aka Python 3000 python35u-debug.x86_64 : Debug version of the Python 3 runtime python35u-devel.x86_64 : Libraries and header files needed for Python 3 python35u-libs.x86_64 : Python 3 runtime libraries python35u-pip.noarch : A tool for installing and managing Python packages python35u-setuptools.noarch : Easily build and distribute Python packages python35u-test.x86_64 : The test modules from the main python 3 package python35u-tkinter.x86_64 : A GUI toolkit for Python 3 python35u-tools.x86_64 : A collection of tools included with Python 3
Wie die Ausgabe zeigt stehen uns nun die Versionen Python 3.4 und Python 3.5 zur Verfügung.
Python 3.5 unter CentOS 7 installieren
Der Rest ist nun eigentlich ganz einfach. Die gewüschte Version installieren wir nun wie gewohnt mit yum. In unserem Fall ist es das Paket python35u und ein paar weitere Pakete für unser Python Virtual Environment.
yum install python35u python35u-setuptools python35u-devel python35u-pip
Nachdem auch diese Installation abgeschlossen ist können wir mit der Bereitstellung unseres Python Virtual Environment beginnen.
Virtual Environment für Python 3.5 erzeugen
Um ein Virtual Environment für Python 3.5 bereitzustellen müssen wir zuerst für unser installieres Python 3.5 virtualenv installieren. Das geht am einfachsten mit pip. Allerdings müssen wir dies passend zu unserer Python Version wählen.
pip3.5 install virtualenv
Downloading virtualenv-13.1.2-py2.py3-none-any.whl (1.7MB) 100% |████████████████████████████████| 1.7MB 250kB/s Installing collected packages: virtualenv Successfully installed virtualenv-13.1.2
Nachdem wir nun virtualenv installiert haben können wir wie gewohnt unser Virtual Environment ausrollen. In diesem Beispiel in das Verzeichnis .venv
virtualenv .venv
Using base prefix '/usr' New python executable in .venv/bin/python3.5 Also creating executable in .venv/bin/python Installing setuptools, pip, wheel...done.
Die Bereitstellung eines Virtual Environment kann auch mit einem unpriviligertem Benutzer erfolgen. Der Vorteil eines Virtualenv ist, dass wir unabhängig vom System verschiedene Python-Pakete selbständig installieren können. So haben wir auch die Kontrolle über die verwendeten Versionen der Pakete und sind vor Überraschungen eines unerwarteten Updates sicher :D Allerdings sind wir auch selber für die Updates in dieser Umgebung verwantwortlich.
Das Virtual Environment aktivieren wir wie folgt:
. .venv/bin/activate
Wenn wir nun Python aufrufen sollten sich dies mit der Version 3.5 melden.
Python 3.5.0 (default, Nov 3 2015, 23:32:46) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Pakete innerhalb des Virtual Environment installieren wir einfach mit pip. Allerdings ist zu beachten, dass wir dies mit aktivem Virtual Environment erledigen. Anbei ein Beispiel für die beliebten Frameworks bottle und flask.
(.venv)[user@server ~]# pip install bottle Collecting bottle Downloading bottle-0.12.9.tar.gz (69kB) 100% |████████████████████████████████| 69kB 962kB/s Building wheels for collected packages: bottle Running setup.py bdist_wheel for bottle Stored in directory: /root/.cache/pip/wheels/0f/bd/f7/21e856551fa937e3c8a9d9592fd74a50714af336b8ee4f42c7 Successfully built bottle Installing collected packages: bottle Successfully installed bottle-0.12.9
(.venv)[user@server ~]# pip install flask Collecting flask Downloading Flask-0.10.1.tar.gz (544kB) 100% |████████████████████████████████| 544kB 570kB/s Collecting Werkzeug>=0.7 (from flask) Downloading Werkzeug-0.11.2-py2.py3-none-any.whl (304kB) 100% |████████████████████████████████| 307kB 1.0MB/s Collecting Jinja2>=2.4 (from flask) Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB) 100% |████████████████████████████████| 266kB 1.3MB/s Collecting itsdangerous>=0.21 (from flask) Downloading itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 49kB 2.7MB/s Collecting MarkupSafe (from Jinja2>=2.4->flask) Downloading MarkupSafe-0.23.tar.gz Building wheels for collected packages: flask, itsdangerous, MarkupSafe Running setup.py bdist_wheel for flask Stored in directory: /root/.cache/pip/wheels/d2/db/61/cb9b80526b8f3ba89248ec0a29d6da1bb6013681c930fca987 Running setup.py bdist_wheel for itsdangerous Stored in directory: /root/.cache/pip/wheels/97/c0/b8/b37c320ff57e15f993ba0ac98013eee778920b4a7b3ebae3cf Running setup.py bdist_wheel for MarkupSafe Stored in directory: /root/.cache/pip/wheels/94/a7/79/f79a998b64c1281cb99fa9bbd33cfc9b8b5775f438218d17a7 Successfully built flask itsdangerous MarkupSafe Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.2 flask-0.10.1 itsdangerous-0.24
Weitere Besonderheiten und Informationen zu Python 3.5 gibt es auf der Projekt-Seite. Viels Spass beim Code anpassen!