- [[..:cue]]
====== Python-Alternativen ======
~~TASK:Stephan Linz?2013-11-08~~
===== Problemstellung =====
==== Betroffene Systeme ====
* alle Ubuntu Versionen, vornehmlich LTS Versionen
==== Beschreibung ====
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.
===== Lösung =====
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 [[https://launchpad.net/~fkrull|Felix Krull]] mit seinem [[https://launchpad.net/~fkrull/+archive/deadsnakes|PPA DeadSnakes]].
==== Hier ein Beispiel für Python 2.7 auf Ubuntu Lucid 10.04.4 LTS ====
=== Installation ===
== PPA einrichten und Python 2.7 installieren ==
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
== Python 2.7 einrichten ==
- ''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
FIXME 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
=== Benutzen ===
- neuen Ordner für die Laufzeitumgebung anlegen und betreten:
mkdir /tmp/py27env && cd /tmp/py27env
- virtuelle Laufzeitumgebung darin anlegen:
virtualenv --no-site-packages --python=python2.7 .
- virtuelle Laufzeitumgebung aktivieren:
source bin/activate
- Was immer nun gemacht wird, es werden die Skripts in ''/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.
- am Ende wird die virtuelle Laufzeitumgebung wieder aufgelöst:
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
{{tag>python ubuntu}}