Posts Tagged ‘Python’

Camelot – Eine MS Access Alternative (Update)

Montag, Januar 10th, 2011

Ich wünsche allen Lesern des Blogs und des Ubuntuusers Planeten ein Frohes neues Jahr.

Heute möchte ich Camelot vorstellen. Camelot ist ein frei programmierbarer Datenbank Frontend für den Desktop. Camelot ist in Python programmiert und verwendet Qt4 als Toolkit.

Camelot

Camelot

Camelot lässt sich in etwa mit MS Access vergleichen. Man kann einfach und schnell eine grafische Oberfläche für eigene Datenbanken erstellen. Allerdings ist Camelot nur eine Alternative zu Access, kein Ersatz. Es ist nicht möglich, Formulare oder Reports von Access Datenbanken zu importieren. Für die Erstellung einfacher Oberflächen sind Python Kenntnisse hilfreich, aber nicht zwingend erforderlich. Die sogenannten Models werden mit einem Texteditor erstellt und bearbeitet. Es gibt keinen grafischen Editor zum “zusammenklicken” der Oberfläche oder der Datenbank.

Camelot ist nicht nur, wie erwähnt, in Python programmiert sondern auch für das Datenbank Interface wird Python verwendet. Als ORM Mapper kommt Elixir zum Einsatz. Formulare kann man automatisch generieren oder individuell gestalten. Camelot bringt bereits viele vordefinierte Elemente zur Anzeige von Daten, sogenannte Delegates, mit. Zum Beispiel ein Eingabeelement für ein Datum inklusive einer Kalenderansicht oder ein Anzeigeelement für Bilder. Es lassen sich auch Reports erstellen. Hierfür wird HTML zusammen mit der Template Engine Jinja2 verwendet. Alternativ lassen sich Vorlagen mit Word erstellen.

Elixir baut auf SQLAlchemy auf. Es lassen sich alle Fähigkeiten und Datenbanken verwenden, die SQLAlchemy bietet, darunter auch Microsoft SQL Server.

Installation

Camelot benötigt eine möglichst aktuelle Version von PyQt. Die Version in Ubuntu Maverick ist leider fehlerhaft und die in Lucid ist zu alt. Es ist daher erforderlich, mindestens PyQt4.8 zu installieren. Man kann sich entweder die Sourcen selbst compilieren oder das Kubuntu Beta Backports PPA von Launchpad verwenden (nur ab Maverick möglich).

sudo apt-add-repository ppa:kubuntu-ppa/beta

Die weitere Installation ist auf der Projektseite beschrieben.

Camelot ist eine durchaus brauchbare Alternative zu Access, in einigen Bereichen vielleicht sogar besser. Durch Python kann man auf den vollen Funktionsumfang der Klassenbibliothek zugreifen und damit zum Beispiel auch Emails verschicken, auf beliebige Geräte oder Daten zugreifen, per XML-RPC oder SOAP auf Webdienste zurückgreifen und vieles mehr. Durch die Verwendung von Qt lassen sich auch wesentlich komfortablere Oberflächen erstellen.

Wer seine Webseiten ebenfalls mit Python erstellt kann für die Datenbank Schnittstelle ebenfalls Elixir verwenden und damit die Models von Camelot recht einfach auf die Webanwendung übertragen. So ließe sich zum Beispiel sehr einfach ein komfortabler Backend für eine Webseite erstellen. Auch Jinja lässt sich für die Webseite als Template Engine einsetzen. Das reduziert den Lernaufwand, da man die Programmiersprache, die Datenbank Schnittstelle und die Template Engine mehrfach verwenden kann.

Natürlich lassen sich mit Camelot auch anderen Anwendungen wie eine DVD Datenbank, ein Adressbuch, eine Materialverwaltung oder eine ToDo Liste programmieren. Alles, was eine Datenbank benötigt, sollte man mit Camelot auch realisieren können.

(UPDATE): Da aus dem Blog nicht ganz hervor geht, wie Camelot arbeitet, habe ich im Ubuntuusers Forum eine kurze Einführung geschrieben

Webentwicklung mal anders: Python statt PHP

Dienstag, Januar 4th, 2011

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.


Switch to our mobile site