Mit zunehmender Laufzeit eines Ubuntu LTS Systems läuft die offizielle stabile Version von Python und dessen Abhängigkeiten weit auseinander. Wenn nun ein Anwenderprogramm oder ein Entwickler für seine Arbeit eine neuere Version von Python benötigt, müsste das Systempaket der LTS Distribution erneuert werden. Da Python aber wichtiger Bestandteil des Ubuntu Basis Systems darstellt, wird in aller Regel die Version von Pythen beibehalten und durch Canonical nie erneuert – ausgenommen Sicherheitsupdates.
Grundlegend kann man auf jedem Linux System eine neuere Python Versionen von Hand aus den Quellen heraus übersetzen und installieren. Hierbei muss aber eine alternative Installation genutzt werden, da man sich sonst die Systeminstallation der originalen DEB Pakete überschreibt! Nach dem Herunterladen und Auspacken würde das in etwa so aussehen (habe ich nicht geprüft):
cd Python-x.y.z ./configure make sudo make altinstall
Wichtig ist hier das altinstall
Dieser Ansatz funktioniert prinzipiell, es ergibt sich aber ein neues Problem. Was ist, wenn man nun auch diese Version erneuern oder entfernen will oder sogar ein „down grade“ benötigt? Hierzu wäre die Nutzung von Debian Paketen hilfreich und genau das bezweckt Felix Krull mit seinem PPA DeadSnakes.
sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python2.7 python2.7-dev
Test:
user@host: ls -ahog /usr/bin/python* lrwxrwxrwx 1 9 2013-09-09 14:48 /usr/bin/python -> python2.6 lrwxrwxrwx 1 9 2013-09-09 14:48 /usr/bin/python2 -> python2.6 -rwxr-xr-x 1 2,5M 2013-09-26 21:13 /usr/bin/python2.6 -rwxr-xr-x 1 1,5K 2013-09-26 21:12 /usr/bin/python2.6-config -rwxr-xr-x 1 2,8M 2013-10-18 17:10 /usr/bin/python2.7 -rwxr-xr-x 1 1,7K 2013-10-18 17:09 /usr/bin/python2.7-config lrwxrwxrwx 1 16 2013-09-09 14:48 /usr/bin/python-config -> python2.6-config -rwxr-xr-x 1 4,1K 2009-05-03 16:24 /usr/bin/python_count -rwxr-xr-x 1 11K 2012-09-06 05:23 /usr/bin/python-mkdebian
Die originale Version Python 2.6 ist über den Link /usr/bin/python
erhalten geblieben. Das neue Python 2.7 kann über /usr/bin/python2.7
benutzt werden:
user@host: python --version; python2 --version; python2.7 --version Python 2.6.5 Python 2.6.5 Python 2.7.4
easy_install
einrichten:user@host: mkdir /tmp/py27prep && cd /tmp/py27prep user@host: curl -O http://python-distribute.org/distribute_setup.py ... user@host: sudo python2.7 distribute_setup.py Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz ... Installing easy_install script to /usr/local/bin Installing easy_install-2.7 script to /usr/local/bin ... Installed /usr/local/lib/python2.7/dist-packages/distribute-0.6.49-py2.7.egg ... Creating /usr/local/lib/python2.7/dist-packages/setuptools-0.6c11-py2.7.egg-info Creating /usr/local/lib/python2.7/dist-packages/setuptools.pth
pip
einrichten:user@host: sudo easy_install-2.7 pip ... Downloading https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz#md5=6afbb46aeb48abac658d4df742bff714 ... Installing pip script to /usr/local/bin Installing pip-2.7 script to /usr/local/bin ... Installed /usr/local/lib/python2.7/dist-packages/pip-1.4.1-py2.7.egg
virtualenv
einrichten:user@host: sudo pip-2.7 install virtualenv ... Downloading virtualenv-1.10.1.tar.gz (1.3MB): 1.3MB downloaded ... Installing virtualenv script to /usr/local/bin Installing virtualenv-2.7 script to /usr/local/bin
Ich musste zuvor die Debian Pakete pip
und virtualenv
entfernen, mit: sudo apt-get remove –purge python-pip
Test:
user@host: virtualenv --version; virtualenv-2.7 --version 1.10.1 1.10.1
mkdir /tmp/py27env && cd /tmp/py27env
virtualenv --no-site-packages --python=python2.7 .
source bin/activate
/tmp/py27env/bin
genutzt. Die Option –no-site-packages
sorgt für ein minimales Setup (nur pip
, sonst nichts) und es müssen alle zusätzlichen Python Pakete über easy_install
installiert werden.deactivate
Test:
user@host: mkdir /tmp/py27env && cd /tmp/py27env user@host: virtualenv --no-site-packages --python=python2.7 . Already using interpreter /usr/bin/python2.7 New python executable in ./bin/python2.7 Also creating executable in ./bin/python Installing Setuptools... ... ...done. Installing Pip... ... ...done.
user@host: source bin/activate
(py27env)user@host: python --version Python 2.7.4
(py27env)user@host: deactivate