Auf unseren Servern stellen wir dir die Programmiersprache Python bereit und bieten dir hier sowohl die offiziell zur von uns eingesetzten Linux-Distribution CentOS gehörende Version 2.4 (auf CentOS-5-Hosts) bzw. 2.6 (auf CentOS-6-Hosts), die dort als stabil gilt und gepflegt wird, als auch ein von uns selbst kompiliertes Python 2.7. Für Experimentierfreudige haben wir außerdem auch schon ein Python 3.2 - Du hast also die freie Wahl, welche Version du benutzen möchtest.
In allen Fällen empfehlen wir dir, deine eigenen Scripts nicht mit einer festen Pfadangabe zu versehen, sondern wie inzwischen üblich mit #!/usr/bin/env python (oder #!/usr/bin/env python2.6, #!/usr/bin/env python2.7 bzw. #!/usr/bin/env python3.2). Das stellt sicher, dass deine Scripts portabel zwischen verschiedenen Systemen austauschbar sind, auf denen Python in unterschiedlichen Pfaden installiert wurde.
Der Pfad zum mit CentOS gelieferten Python ist /usr/bin/python. Du kannst python -V eingeben, um zu sehen, ob auf dem Host, auf dem dein Uberspace liegt, Python 2.4 oder 2.6 installiert ist.
Um zusätzliche Python-Module installieren zu können, musst du ggf. noch zwei Verzeichnisse in deinem Uberspace anlegen (für 2.4 oder 2.6, je nachdem - wir legen hier kurzerhand beide an):
[julia@radon ~]$ mkdir -p ~/bin ~/lib/python2.4 ~/lib/python2.6
Anschließend kannst du Python-Module mittels easy_install installieren.
Der Pfad zu Python 2.7 ist /usr/local/bin/python2.7, was faktisch ein Symlink auf /package/host/localhost/python-2.7/bin/python2.7 ist, wo die eigentliche Installation liegt.
Um zusätzliche Python-Module installieren zu können, musst du ggf. noch zwei Verzeichnisse in deinem Uberspace anlegen:
[julia@radon ~]$ mkdir -p ~/bin ~/lib/python2.7
Anschließend kannst du Python-Module mittels easy_install-2.7 installieren.
Der Pfad zu Python 3.2 ist /usr/local/bin/python3.2, was faktisch ein Symlink auf /package/host/localhost/python-3.2/bin/python3.2 ist, wo die eigentliche Installation liegt.
Python-Module kannst du direkt mittels easy_install-3.2 installieren; das Anlegen der Verzeichnisstruktur geschieht automatisch bei der ersten Modulinstallation. Alternativ kannst du auch pip-3.2 verwenden.
Bitte beachte, dass bisher nur sehr wenige Module schon für Python 3.2 verfügbar sind - die meisten lassen sich nur unter Python 2.X installieren.
Zum Verständnis, wie wir die Installation eigener Python-Module realisiert haben:
Unsere Python-Installationen sind je nach Host entweder mit den setuptools oder mit distribute versehen, die es dir ermöglichen, mit Hilfe von easy_install (bzw. easy_install-2.7 und easy_install-3.2) weitere Module innerhalb deines Uberspaces zu installieren, wenn sie nicht global vorliegen. Auf diese Weise ist es auch möglich, neuere Versionen von bereits global installierten Modulen zu benutzen, für die wir aus offiziellen Paketquellen bisher kein Update beziehen konnten. Dazu haben wir global die Dateien …
für Python 2.4 (CentOS-5-Hosts)
bzw. für Python 2.6 (CentOS-6-Hosts)
bzw. für Python 2.7
bzw. für Python 3.2
bereitgestellt, die zusätzlich zu den globalen Verzeichnissen auch ~/lib/python2.4, ~/lib/python2.6, ~/lib/python2.7 bzw. ~/lib/python3.2 zur Installation weiterer Module vorsehen und zu Modulen gehörige Scripts in ~/bin installiert, was automatisch in deinem $PATH liegt. So kannst du dann ganz einfach eigene Module installieren, hier exemplarisch für die docutils:
[julia@radon ~]$ easy_install docutils
Searching for docutils
Reading http://cheeseshop.python.org/pypi/docutils/
Reading http://docutils.sourceforge.net/
Reading http://cheeseshop.python.org/pypi/docutils/0.7
Best match: docutils 0.7
Downloading http://prdownloads.sourceforge.net/docutils/docutils-0.7.tar.gz?download
Processing docutils-0.7.tar.gz
...
Adding docutils 0.7 to easy-install.pth file
...
Installing rst2odt.py script to /home/julia/bin
Installing rst2newlatex.py script to /home/julia/bin
Installing rstpep2html.py script to /home/julia/bin
Installing rst2html.py script to /home/julia/bin
Installing rst2s5.py script to /home/julia/bin
Installing rst2xml.py script to /home/julia/bin
Installing rst2pseudoxml.py script to /home/julia/bin
Installing rst2odt_prepstyles.py script to /home/julia/bin
Installing rst2man.py script to /home/julia/bin
Installing rst2latex.py script to /home/julia/bin
Installed /home/julia/lib/python2.4/docutils-0.7-py2.4.egg
Processing dependencies for docutils
Weitere Anpassungen (und auch das Setzen der PYTHONPATH-Umgebungsvariable) sind hierbei nicht nötig; jedes Python-Script berücksichtigt automatisch auch die in deinem Uberspace zusätzlich installierten Module.
Die Python Imaging Library, kurz „PIL“, ist eine beliebte Python-Bibliothek zur Bildverarbeitung. Eine Frage auf StackOverflow weist jedoch auf Probleme hin:
The PIL version packaged on pypi (by the author) is fundamentally mis-packaged. People have created easy_installable versions elsewhere. Currently, you need to specify a find-links
URL and pin the version to get a good package:
easy_install -f http://dist.plone.org/thirdparty/ -U PIL==1.1.7
Konkret sieht es so aus, dass das PIL, das man über pypi.python.org beziehen kann, seine Module nicht im Namensraum „PIL“ installiert. Das heißt, man kann beispielsweise das Module „Image“ mit import Image benutzen, was wohl auch so beabsichtigt ist, wie das Tutorial zu PIL beschreibt. Allerdings haben fast alle Distributionen die PIL-Module in den Namensraum „PIL“ gepackt, so dass Anweisungen wie import PIL oder from PIL import Image benutzt werden müssen - was sich als die verbreitetere Form etabliert hat. Insofern kann das defaultmäßig mittels easy_install installierbare PIL gelinde gesagt als unbrauchbar angesehen werden.
Nun kommt aber auch noch dazu, dass PIL selbst (egal, wer dafür ein Egg paketiert hat) erschreckend unvorbereitet darauf ist, dass es auf 64-Bit-Architektur installiert werden könnte. Soll heißen: Es sucht die entsprechenden Libraries (jpeg, zlib, freetype, …) in /usr/lib und /usr/local/lib - nicht aber dort, wo sie auf einem 64-Bit-System liegen, nämlich in /usr/lib64. Die PIL-Pakete verschiedener Linux-Distributionen liefern dementsprechend schon seit Jahren Patches mit, um PIL das beizubringen - PIL selbst kann es bis heute nicht.
Faktisch muss daher die setup.py angepasst werden, damit PIL die Libraries findet. PIL kann daher nicht mit easy_install installiert werden. Du kannst wie folgt vorgehen (wir gehen mal davon aus, du benutzt Python 2.7 und hast, wie oben beschrieben, bereits mkdir -p ~/bin ~/lib/python2.7 durchgeführt):
[simone@fornax ~]$ curl --silent http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz | tar -xzf -
[simone@fornax ~]$ cd Imaging-1.1.7
[simone@fornax Imaging-1.1.7]$ perl -pi -e 's|/usr/lib|/usr/lib64|g' setup.py
[simone@fornax Imaging-1.1.7]$ python2.7 setup.py install
...
creating /home/simone/lib/python2.7/PIL.pth
[simone@fornax Imaging-1.1.7]$ cd ..
[simone@fornax ~]$ rm -rf Imaging-1.1.7
Das war's. Kurz testen, ob's geklappt hat:
[simone@fornax ~]$ python2.7
Python 2.7.1 (r271:86832, Mar 14 2011, 23:31:42)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import Image
>>>
Wenn hier kein Fehler gemeldet wird, ist alles gut - ansonsten frag einfach beim Support nach Unterstützung.
Wir haben dir ein paar Beispiele zusammengestellt, was du mit Python so anstellen kannst - beispielsweise läuft das Softwareverwaltungsprojekt Trac damit, und wenn du selbst webbasierte Applikationen mit Python entwickeln willst, ist ja vielleicht Django etwas für dich.