Inhaltsverzeichnis

Achtung Falle

Python-Alternativen

Python-Alternativen Aufgabe
verantwortlich:Stephan Linz
zu erledigen bis:2013/11/08

Problemstellung

Betroffene Systeme

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 Felix Krull mit seinem 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
  1. 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
  2. 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
  3. 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

  1. neuen Ordner für die Laufzeitumgebung anlegen und betreten:
    mkdir /tmp/py27env && cd /tmp/py27env
  2. virtuelle Laufzeitumgebung darin anlegen:
    virtualenv --no-site-packages --python=python2.7 .
  3. virtuelle Laufzeitumgebung aktivieren:
    source bin/activate
  4. 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.
  5. 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