Prof. Dr. Detlef Kreuz

Die Installation von easy_install ist unter Python 2.6 / Windows nicht so easy

Endlich bin ich einmal dazu gekommen, meine Installation von Python von Version 2.5.x auf 2.6.x zu aktualisieren. Nur, ein Hindernis gab es dabei: easy_install.

easy_install ist ein extrem nützliches Werkzeug, um externe Python-Pakete zu installieren, wie z.B. das vorzügliche docutils oder SQLAlchemy. Es ist bei mir der Dreh- und Angelpunkt für weitere Python-Software, egal für welchen Zweck.

Also, easy_install muss nach der Installation von Python 2.6.x als Erstes selbst installiert werden. Schnell zur PyPI-Seite für die setuptools, in denen easy_install enthalten ist. Nur zu dumm: der aktuellste Installer für Windows unterstützt nur Python 2.5.

Gut, wozu kenne ich Software schon von den Lochkarten her? Die *.egg-Datei ist schnell heruntergeladen und noch schneller ausgepackt. Der Inhalt kommt in ein temporäres Verzeichnis und schon kann die Installation losgehen. Sie könnte losgehen. Wenn da nicht die Fehlermeldung wäre: "pkg_resources.DistributionNotFound: setuptools".

Ein klassisches Problem: setuptools versucht sich selbst an den Haaren aus dem Sumpf zu ziehen. Aber diesmal findet es sich nicht selbst. Auf Englisch heißt das Bootstrapping. Nach einigem Herumsuchen ist das auch die Lösung. Die *.egg-Datei ist nicht nur etwas ähnliches wie eine ZIP-Datei, sie enthält zu Beginn auch direkt lesbaren Text:

#!/bin/sh
if [ `basename $0` = "setuptools-0.6c9-py2.6.egg" ]
then exec python2.6 -c "import sys, os; sys.path.insert(0, os.path.abspath('$0')); from setuptools.command.easy_install import bootstrap; sys.exit(bootstrap())" "$@"
else
  echo $0 is not the correct name for this egg file.
  echo Please rename it back to setuptools-0.6c9-py2.6.egg and try again.
  exec false
fi

Das ist zwar ein Shellskript und unter Windows so nicht wirklich zu gebrauchen, bringt meiner einen aber auf den richtigen Weg. *.egg-Dateien können offenbar in den Suchpfad von Python aufgenommen werden. Den absoluten Pfad meiner *.egg-Datei kenne ich, also kann ich einfach aufrufen:

C:\User\kreuz>python -c "import sys; sys.path.insert(0, 'C:/Users/kreuz/setuptools-0.6c9-py2.6.egg'); from setuptools.command.easy_install import bootstrap; sys.exit(bootstrap())"

... und die (Python-) Welt ist wieder in Ordnung.