Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

development:python

Python

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 und 3.4.

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.

Default-Version

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. Da beide Versionen alles andere als aktuell sind, stellen wir kurzerhand noch Version 2.7 und 3.4 und 3.5 unter /package bereit.

Version 2

Der Pfad zu Python 2.7 ist /usr/local/bin/python2.7, was faktisch ein Symlink auf /package/host/localhost/python-2/bin/python2.7 ist, wo die eigentliche Installation liegt.

Python-Module kannst du hier mit pip2.7 installieren. Bitte beachte, dass du hier bei das --user-Flag angeben musst, damit die Module in deinem Home-Verzeichnis installiert werden:

 [julia@amnesia ~]$ pip2.7 install Paketname --user

Version 3

Der Pfad zu Python 3 ist /usr/local/bin/python3, was faktisch ein Symlink auf /package/host/localhost/python-3/bin/python3 ist, wo die eigentliche Installation liegt.

Python-Module kannst du hier mit pip3 installieren. Bitte beachte, dass du hier bei das --user-Flag angeben musst, damit die Module in deinem Home-Verzeichnis installiert werden:

 [julia@amnesia ~]$ pip3 install Paketname --user

Probleme

MarkupSafe

Der Installer von MarkupSafe legt offenbar seine Dateien in einem falschen Verzeichnis ab. Um das zu korrigieren, ist Handarbeit notwendig:

$ mv ~/lib/python2.7/home/$USER/lib/python2.7/markupsafe ~/lib/python2.7/
$ rm -r ~/lib/python2.7/home

PIL

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 --user
...
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.

SQlite

Wenn du eine neuere Version von SQLite benutzen möchtest, musst du ggf. die LD_LIBRARY-Variable anpassen. Gehen wir mal davon aus, dass du das SQLite unter /package/host/localhost/sqlite-3.7.15.2 benutzen möchtest (Achtung, die Pakete unter /package/host/localhost variieren von Host zu Host, schaue lieber vorher nach). Dann kannst du einfach folgenden Befehl ausführen, um den Pfad bei jedem Login zu setzen:

echo "export LD_LIBRARY_PATH=/package/host/localhost/sqlite-3.7.15.2/lib:$LD_LIBRARY_PATH" >> .bash_profile 

Wenn die Installation dann doch noch nicht klappen sollte, kannst du noch weitere Umgebungsvariablen anpassen.

development/python.txt · Zuletzt geändert: 2016/02/02 17:11 von uber