Wer eine eigene Webseite programmieren will hat normalerweise die Wahl zwischen PHP, PHP oder PHP. Die meisten Provider bieten nur die klassischen LAMP Server an, also Linux, Apache, MySql und PHP. Bei einigen Providern findet man vielleicht noch Ruby on Rails oder ASP bzw ASP.NET.
Python eignet sich jedoch auch hervorragend für die Entwicklung von Webseiten. Viele Provider können zwar Python Scripte ausführen, jedoch ist die Python Version meist veraltet, es gibt nur die wichtigsten Pakete und normalerweise lässt sich Python nur über die CGI Schnittstelle ausführen. Die ist aber extrem langsam und damit denkbar ungeeignet. Damit man Python sinnvoll nutzen kann sollte der Provider eine möglichst aktuelle Python Version (mindestens 2.5, besser 2.6, 3.x ist nur bedingt zu empfehlen) anbieten und als Schnittstelle mod_python, FastCGI oder, richtig optimal, mod_wsgi verwenden.
Python Hosting
Der ideale Python Hoster bietet also Python 2.6 oder sogar 2.7, als Schnittstelle mindestens FastCGI oder besser WSGI, möglichst viele Python Pakete und die Option, auf Wunsch fehlende Pakete nachzuinstallieren und als Datenbankserver MySQL oder Postgresql. Eine Liste von Shared Hostern findet man im Python Wiki.
Eine andere Möglichkeit für das Python Hosting ist natürlich ein eigener Server. Das sollte allerdings nur der tun, wer sich wirklich damit auskennt, da solche vHosts gerne vernachlässigt werden und schnell zu Spam Schleudern mutieren.
Ich persönlich habe einen Account bei Raumopol. Der Hoster bietet neben PHP auch Python 2.6 und FastCGI. Zusätzlich zu der sonst üblichen MySQL Datenbank bekommt man auch Postgresql und sogar CouchDB. Auf Wunsch lassen sich fehlende Python Pakete nachinstallieren. Wer Django verwenden möchte findet auch spezialisierte Django Hoster.
Python Webframeworks
Die Webentwicklung mit Python läuft anfangs etwas anders ab als bei PHP. Es reicht nicht, einfach eine index.php zu erstellen. Man muss direkt mit der CGI Schnittstelle (oder genauer mit WSGI) arbeiten.
Um das zu vermeiden verwendet man ein Framework, von denen es für Python inzwischen auch eine ganze Menge gibt. Das bekannteste dürfte Django sein. Man kann es mit PHP Frameworks wie CakePHP vergleichen. Es bringt viele Funktionen schon mit, darunter sogar die automatische Generierung eines Admin Interfaces. Ein ebenfalls großes und bekanntes Framework ist Zope.
Ein Vertreter der sogenannten Micro Frameworks ist Bottle. Bottle besteht nur aus einer einzigen Datei und hat außer Python keine weiteren Abhängigkeiten. Trotzdem bietet Bottel eine eigene Template Engine, URL Routing und Caching. Eine umfangreiche Liste von Python Webframeworks findet man hier.
Alle Frameworks nehmen einem die lästige Arbeit ab, direkt mit CGI oder WSGI zu arbeiten.
Flask
Ein Webframework möchte ich genauer vorstellen, und das ist Flask. Flask zählt zu den Microframeworks. Es bietet, ähnlich wie Bottle, einige Grundfunktionen wie URL Routing. Im Gegensatz zu Bottle besteht Flask jedoch nicht aus einer einzelnen Datei sondern baut auf Werkzeug auf, dem eigentliche WSGI Wrapper. Als Template Engine kommt standardmäßig Jinja2 zum Einsatz, lässt sich jedoch leicht gegen andere austauschen.
Ein Vorteil von Flask zum Beispiel gegenüber Django liegt in der Flexibilität. Django bietet viele Funktionen ab Werk, wie eine eigene Template Engine oder einen ORM für die Datenbank. Es ist jedoch schwierig bis unmöglich, die Funktionen gegen andere auszutauschen. Im Vergleich zu Bottle ist Flask jedoch deutlich umfangreicher und es gibt bereits einige Extensions, die die Arbeit deutlich vereinfachen.
Der Vorteil praktisch aller Python Webframeworks, und damit auch von Flask, gegenüber den einfachen PHP Entwicklung ist der mitgelieferte Webserver. Während der Entwicklungsphase kann man weitestgehend auf einen richtigen Webserver wie Apache verzichten. Es reicht ein einfaches Script.
Am einfachsten installieren lässt sich Flask, wie die meisten Python Pakete, mit easy_install. Unter Ubuntu installiert man es mit
sudo apt-get install python-setuptools
Anschließend installiert man Flask mit dem Befehl
sudo easy_install flask
Die Abhängigkeiten werden automatisch installiert und auf diesem Weg lassen sich auch viele weitere Pakete installieren.
Um Konflikte zwischen unterschiedlichen Paketversionen zu vermeiden empfiehlt es sich, jedes Projekt in eine spezielle virtuelle Umgebung zu packen. Einen guten Einstieg bietet das Flask Tutorial.
Warum Python?
Es gibt verschiedene Gründe, Python den Vorzug vor PHP zu geben. So ist Python von Anfang an eine echte objektorientierte Programmiersprache gewesen. PHP hat sich, historisch bedingt, anders entwickelt und das merkt man häufig bis heute. Python lässt sich auch außerhalb der Webentwicklung einsetzen und es gibt eine umfangreiche Klassenbibliothek. Für PHP gibt es inzwischen auch Bestrebungen, PHP für Desktop Anwendungen fit zu machen wie zum Beispiel mit GTK-PHP. Verglichen mit den Möglichkeiten von Python ist das jedoch eher vernachlässigbar. Das Anwendungsgebiet von Python erstreckt sich von einfachen Scripts über die Webentwicklung bis hin zu komplexen Desktop Anwendungen wie Tryton.
Und genau das ist auch bei mir der ausschlaggebende Grund gewesen. Mir fehlt die Zeit, mir für jeden Anwendungsfall die optimale Sprache zu suchen und zu erlernen. Zumindest um sie so zu lernen das ich sie sinnvoll beherrsche. Statt dessen konzentriere ich mich lieber auf eine Sprache, mit der ich möglichst viele Anwendungsfälle abdecken kann. Und das ist in meinem Fall Python.
Übrigens: ubuntuusers.de ist ebenfalls in Python geschrieben. Bei der aktuellen Version wird größtenteils noch Django verwendet. Die in der Entwicklung befindliche Version basiert vollständig auf Werkzeug, worauf ja auch Flask aufbaut. Python taugt also auch für Projekte in dieser Größenordnung.