Python unter Linux

Zurück zur Hauptseite


Wer Python speziell mit Linux machen möchte und außerdem möglichst viel über Linux erfahren will, der sollte sich den
deutschen Dreh- und Angelpunkt für Linux ansehen. Dort sind auch weitere Pythonlinks zu finden, wenn man bei den Links nach "Programmierung - Pythonprogrammierung unter Linux" schaut.

Nachfolgend sollen hier zu speziellen Problemen Hinweise gegeben werden, die nur der Linuxbenutzer so vorfindet. Vieles davon ist dem alteingesessenem Linuxnutzer ohnehin klar. Besonders zielen diese Hinweise deshalb auf Nutzer, die vielleicht schon mit Python unter Windows gearbeitet haben. Aber auch der Linuxkenner, der sich Python neu erobern will, kann sich manche Suche durch diese Hinweise abkürzen.

Die nachfolgenden Betrachtungen gliedern sich wie folgt:

1 Installation
1.1 Vorbemerkungen

1.2 unter SuSE - Linux
1.3 unter Knoppix 3.x
1.4 Ist Tk installiert?
2 Einrichten von Idle
2.1 Vorbemerkungen

2.2 Wo finde ich Idle?
2.3 Idle nachinstallieren
2.4 Die Schrift ist mir zu klein 3 Die Wahl des Editors
3.1 Syntax - Farbhervorhebungen

4 Plattformunabhängigkeit
4.1 Vorbemerkungen
4.2 der Wagenrücklauf
4.3 Umlaute/Sonderzeichen
4.4 Module, die nur unter einem Betriebssystem laufen
4.5 plattformübergreifende GUI

5 Hinweise zum Starten von Python - Scripten
5.1 aus der Kommandozeile (verschwinden verhindern)
5.2 aus Idle
5.3 Magic-Line
5.4 Zuordnung von Scripten zum ausführenden Programm unter KDE


1 Installation

1.1 Vorbemerkungen

Wer eine der gängigen Linux  - Distributionen benutzt, und damit meine ich (ohne weitere ausschließen zu wollen) besonders SuSE, RedHat oder Debian, der hat Python mit im Lieferumfang. Allerdings aufgepasst! Python wird bei manchen Installationen nicht mit installiert, sondern muss mit der Hand zusätzlich angekreuzt werden. Auch kommt es vor, dass zwar der Pythoninterpreter laufbereit ist, es sich aber um eine ältere Version handelt. Eine weitere Version, mit einer höheren Versionsnummer, kann mitunter nachinstalliert werden. Leider ist diese dann von den beiliegenden Paketen her nicht so vollständig. Das trifft z.B. auf einige Versionen der Debian-basierten Knoppix-CD zu. Wer also wirklich das neueste und beste haben möchte, kommt dann um das Selbstübersetzten der Quellen nicht herum. Meist kann man sich aber damit helfen, dass man fehlende Pakete aus dem Internet holt. Aber auch dabei ist große Aufmerksamkeit geboten, wenn es um die zu den vorhandenen Bibliotheken passenden, erforderlichen Versionen geht.

Ob Python schon lauffähig ist, ist leicht festzustellen, indem man in der Textkonsole einfach "python" eingibt. Das geht sowohl im Textmodus, als auch in einem Konsolenfenster mit einem der schönen Windowmanager unter X. Wenn dann der Python - Interpreter startet, kann man gleich weiterprobieren und zum Bsp. import - Kommandos eingeben von den Bibliotheken, die man gern benutzen möchte wie z.B.

>>> import Tkinter

>>> import curses

Kommt keine Fehlermeldung, dann sind diese Teile vorhanden und können genutzt werden. Fehlen sie, was man an den Fehlermeldungen merkt, ist Nachinstallieren angesagt. Besonders Tkinter ist unverzichtbar, wenn man mit der grafischen Programmierumgebung Idle arbeiten möchte. Übrigens, wer die Python Imaging Library PIL installiert, muß mit Kollisionen zu Tkinter rechnen!


1.2 SuSE - Linux

Die Installation von Python ist nicht so schwierig, wie es anfangs zu sein scheint, wenn man nach der Installation Python nicht vorfinden sollte, weil man z.B. ein "Minimalsystem" gewählt hat.  Deshalb mal hier die Pakete, wie sie bei SuSE untergebracht sind. Da ich jetzt glücklicherweise eine Version auf DVD nutze, ist CD-Wechselspiel nicht mehr angesagt, weil alles auf einer Scheibe liegt (freu!). Deshalb weiß ich leider nicht die jeweilige Nummer der CD. Aber ich denke, das ist rauszukriegen. Das ist der Filter durch den nur die durchkommen, die wirkliches Interesse an Python haben :-)
 

Folgendes sollte installiert sein oder ist nachzulegen, hier mal am Beispiel einer SuSE - Distribution gezeigt (x/y/z steht für die jeweilige Versionsnummer, die sich in kurzen Abständen ändert), wobei für die Paketnamen keine Langzeitgarantie gegeben werden kann:
 

Paket (*.rpm)

Bemerkungen

python x.y.z

Python Interpreter

pyth-tk x.y.z

Tkinter, Python Tk Interface

python-tkinter x.y.z

Tkinter - Python Shared Library

python-curses x.y.z

Interface für (n)curses library

python-demo x.y.z
Demonstrations Scripts (wie z.B. auch Idle)

python-doc x.y.z    

Dokumentation (HTML)


Ferner gibt es noch etliche Module, deren Namen alle mit python anfangen, für diverse Anwendungen wie PyGTK, PyGnome, pyxml usw.

Wer sich bei seiner neuesten Ausgabe von SuSE-Linux darüber informieren will, was denn eigentlich alles schönes für Python dabei ist, der sollte sich von der HomePage von SuSE die Paketliste herunterladen und diese dann nach dem Begriff "Python" durchsuchen. Da wird man staunen, wieviele Pakete mit Python zu tun haben. In der Paketliste steht neben den Paketnamen, die zumeist auch die Versionsnummer des betreffenden Programms mit enthalten noch ein Kurztext, der angibt, wozu das Paket dient. Mitunter steht nur dort das Wort Python, womit man also auch Pakete findet, die einen abweichenden Namen tragen, wie zum Beispiel Tkinter.


1.3 unter Knoppix 3.x

Hier trift das oben Gesagte genau zu. Eine Python - Version ist mit Tkinter ausgestattet, die neuere Version ist es nicht. Nun ja, auf einer CD ist der Platz wirklich begrenzt und die Wahl zwischen den Paketen schwer. Wer also mit der Live-Version arbeitet, muss das so hinnehmen. Wer sich jedoch aufgerafft hat und mit dem vorhandenen Script auf der CD sich das komplette Knoppix auf die Festplatte zu spielen, dem öffnen sich jetzt viele neue Türen. Erstens hat der Glückliche ein funktionierendes Debian auf der "Kiste", ohne sich mit Installationsinnereien abplagen zu müssen. Zweitens kann jetzt das große Erweitern losgehen, denn auf der Debian - Heimatseite gibt es vollständige Paketlisten und alle Pakete zum herunterladen, und das zu den verschiedenen Versionen von Debian (von superstabil bis Risiko :-) ). Dort findet man dann auch das Paket idle-pythonx.x (x für die Versionsnummern 1.5 bis 2.2) zum Nachinstallieren.



1.4 Ist Tk installiert?

Nochmal ganz kurz:

Ob Python installiert ist, erkennt man, ob sich in der Kommandozeile nach der Eingabe von "python" das Programm meldet. Wenn das klappt, kann man herausfinden ob Tkinter installiert ist, indem man "import Tkinter" eingibt. Kommt keine Fehlermeldung, ist alles o.k.
Wenn nicht, muss Tkinter nachinstalliert werden. Dabei sollte man YAST verwenden, das Administrationsmodul von SuSE. So wird sichergestellt, dass abhängige Pakete mitinstalliert werden. Ein solches wäre hier z.B. ein Paket für Tk, das wiederum auf Tcl beruht.
Eine mögliche Ursache für das Nichtfunktionieren von Tkinter wäre nämlich auch, die fehlende Installation von Tk. Ob das gegeben ist, prüft man z.B. dadurch, dass man in der Textkonsole auf der X - Oberfläche das Kommando  "wish" eingibt. Dann sollte auf dem Bildschirm ein leeres Tk - Fenster erscheinen. Kommt das nicht, muß Tk nachinstalliert werden.




2 Einrichten von Idle

2.1 Vorbemerkungen

Wer unter X entwickeln möchte, findet schnell die richtige Hilfe. Es steht hierfür die ldle zur Verfügung, die selbst Tkinter benutzt und einen recht ordentlichen Editor, einen Objektbrowser und einen Debugger enthält. Der Editor unterstützt die Syntax - Farbhervorhebung. Dadurch werden die verschiedenen Syntaxelemente wie Schlüsselwörter, Variablennamen, Strings, Kommentar usw. in verschiedenen Farben dargestellt. Leider lässt sich diese Darstellung mit der Idle allein nicht farbig ausdrucken.


2.2 Wo finde ich Idle?

Um festzustellen, ob Idle schon installiert ist, muss sie erstmal aufgespürt werden. Sie befindet sich nicht zwangsläufig an einer vorgegebenen Position. Deshalb bemüht man am besten die Dateisuche, indem man im Verzeichnis /usr nach idle.py sucht. Dies ist auch die Startdatei für Idle. Hat man sie gefunden, kann man sich einen Link dorthin auf den Desktop oder ins Homeverzeichnis oder einen anderen Lieblingsplatz legen. Gestartet kann dann z.B. in der Kommandozeile mit python idle.py.


2.3 Idle nachinstallieren

Wurde Idle nicht gefunden, muss sie nachinstalliert werden. Der zugehörige Paketname kann das Wort Idle enthalten, wie z.B. bei Debian 3.0 (idle-pythonx.x) oder auch python-demo heißen, wie bei SuSE 8.2. Also ist hier etwas Spürsinn gefragt. Bei den neueren Distributionen ist wohl idle-python am häufigsten.


2.4 Die Schrift ist mir zu klein

Dort, wo wir idle.py gefunden haben, steht im gleichen Verzeichnis die Datei config-unix.txt. Diese öffnen wir mit unserem Lieblingseditor und setzen die Einstellung font-size= auf eine höhere Zahl, z.B. auf 17. Beim nächsten Start der Idle kann man die Schrift besser sehen. Inzwischen hat auch eine Funktion für solche Einstellungen Eingang in das Menü gefunden.


3 Die Wahl des Editors

3.1 Vorbemerkungen

Unter Linux kann man mit Python in vielen Spielarten arbeiten. So geht es in der Textkonsole, wobei man dann am besten mit zwei Konsolen arbeitet. Einmal die Kommandozeile, zum Aufrufen des Pythoninterpreters + Quellprogramm und auf der anderen Konsole der Texteditor zum Bearbeiten des jeweiligen Pythonmoduls. Als Editor ist wieder das ganze Spektrum von XEmacs bis hin zu den Editoren, die in KDE eingebaut sind, möglich. Nach jedem Geschmack ist alles dabei, wie unter Linux üblich. Wer mit Idle arbeitet, findet hier eine vollständige Programmierumgebung vor, aus der man heraus die entworfenen Module gleich starten kann. Ebenso kann man interaktiv einzelne Befehlszeilen dem Interpreter anbieten. Aber auch wer mit KWrite arbeitet, oder einem anderen Editor, der muss nach jeder Änderung den Quelltext abspeichern und kann ihn dann in der Kommandozeile erneut starten. Dazu benutzt man die History-Funktion in der shell, indem man mit der Kursortaste aufwärts den letzten komplett geschriebenen Befehl wieder hervorholt.


3.2 Syntax - Farbhervorhebungen

So gibt es für den XEmacs, wie auch für den KWrite ein Ergänzungsmodul für die farbliche Hervorhebung von Python -Schlüsselwörtern. Diese Funktion ist übrigens in der Entwicklungsumgebung Idle ebenfalls fest eingebaut. Ferner bietet der erweiterte Texteditor unter KDE die Möglichkeit, für seine Farbunterstützung zwischen verschiedenen Programmiersprachen auszuwählen, wobei auch Python, sofern in älteren Distributionen nicht schon enthalten, mit ein klein wenig Nacharbeit eingerichtet werden kann. Die zugeordneten Farben lassen sich auch abändern. So können diese z.B. bei KWrite in den Menüpunkten zur Einrichtung des Editors einzeln angewählt und eingestellt werden.

4 Plattformunabhängigkeit

4.1 Vorbemerkungen

Ein großer Vorteil von Python ist die Möglichkeit, auf sehr viel verschiedenen Plattformen arbeiten zu können. Dazu muß für das jeweilige Betriebssystem ein Pythoninterpreter zur Verfügung stehen. Dies ist für die wichtigen Betriebssysteme, aber auch für etwas seltenere (wie z.B. EPOC für Psion-PDA) Plattformen gegeben. Nun gibt es Problemfelder, die dabei zu beachten sind. So gibt es z.B. Unterschiede in der Art, wie unter verschiedenen Betriebssystemen Daten abgespeichert werden. Hierzu wird nachfolgend zu Wagenrückläufen und Umlauten etwas gesagt. Ferner kann es sein, dass Module, die erweiterte Funktionen bereitstellen und dabei oft spezifische Möglichkeiten des jeweiligen Betriebssystems herauskitzeln, eben ihre Plattformunabhängigkeit einbüßen. Das heißt, dass Programme, die solche Module verwenden, nicht plattformunabhängig bleiben, sofern nicht geeignete Gegenmaßnahmen getroffen werden.
Ein weiteres Problem, dass auch schon früher unangenehm auftauchte, als die Universalsprache JAVA modern wurde, ist die Tatsache, dass Programme mit grafischen Oberflächen auf verschiedenen Plattformen jeweil anders aussehen.


4.2 der Wagenrücklauf

Beginnen wir mit dem Zeilenende/Zeilenwechsel. Hier werden bei MS-DOS/MS-Windows-Programmen zwei Byte angehängt, nämlich LF und CR. Bei Unix/Linux dagegen wird nur LF nachgestellt. Das macht sich dann z.B. so bemerkbar, dass beim Öffnen eines Linux-Textes unter einfachen Windows-Editoren der komplette Text in einer Zeile (die ewig nicht enden will) dargestellt wird. Solche Daten muss man vor dem Portieren auf die andere Plattform mit einem geeigneten Umwandlungsprogramm anpassen oder mit einem Editor behandeln, der beide Systeme (umschaltbar) speichern kann (wie z.B. KWrite) und dann in der richtigen Form abspeichern. Ab der Version Python 2.3 soll dieses Problem erledigt sein, weil man Files mit einer "Universalbetriebsart" speichern und laden kann. Ich habe das selbst noch nicht ausprobiert, weil ich auf Linux noch Python 2.2 benutze. Abhilfe auch mit älteren Python-Versionen könnte man selbst programmieren, indem die Texte in eine Direktzugriffsdatei gelegt werden, die über selbst definierte Zeilenendezeichen organisiert wird. Bisher habe ich mich mit dem Konvertieren begnügt, weil es auch nicht sooo häufig vorkam. Wer aber ständig mit seinem Daten die Plattform wechseln muss, sollte drüber nachdenken.


4.3 Umlaute/Sonderzeichen

Seit ich mit Python 2.2 arbeite, tritt das Problem eigentlich nicht mehr auf, aber früher war es schon sehr störend. Umlaute und Sonderzeichen (nämlich die Zeichen, die im ASCII - Code in der hinteren Hälfte stehen (also größer als Dezimal 127) können verschieden kodiert sein. Erfahrene mehrjährige Programmierer kennen es vielleicht noch beim Wechsel von ASCII und ANSI - Kode. Irgendwie muss es jetzt besser gehen, weil die Umstellung auf Unicode das Problem wohl umgeht. Dafür gibt es aber ein anderes Problem, nämlich die Umlauteverweigerung durch Idle. Stehen Umlaute  (oder auch ß) im Quelltext oder nur als Kommentare, wird das Abspeichern des Textes abgelehnt. Auch die Eingabe dieser Zeichen mit raw_input() wird abgewehrt. Jedoch laufen solche Programme in der Kommandozeile ohne Schwierigkeiten. Auch hier wäre eine Selbsthilfe für ältere Pythonversionen denkbar, indem diese Sonderzeichen mit eigenen Mitteln maskiert werde, z.B. 'ä' als '/a' und dann natürlich auch '/' als '//' usw.


4.4 Module, die nur unter einem Betriebssystem laufen

Bei Modulsammlungen ist aus gutem Grund mit angegeben, für welche Betriebssysteme die einzelnen Module geeignet sind. Wer also unbedingt plattformübergreifend bleiben will, muss die Finger von solchen speziellen Modulen lassen, die auf ein Betriebssystem festgelegt sind. Es gibt in einigen Fällen mitunter Möglichkeiten zur Abhilfe. Voraussetzung ist, dass die besondere benötigte Funktion nun vielleicht in zwei verschiedenen Modulen für beide benötigten Betriebssystem aber getrennt vorhanden sind. So gibt es für die Möglichkeit der Kursorpositionierung im Textmodus z.B die Module msvcrt (Windows) und curses (Linux). Hier hilft ein plattformabhängiger import. Mit if und Variablen, die das darunterliegende BS melden (z.B. import sys, print sys.platform) kann man dem Programm ermöglichen, das darunterliegende Betriebssystem zu ermitteln, und die benötigte Funktion dann mit dem geeigneten Modul bereitzustellen. Viel Aufwand! Aber was soll man machen.

4.5 plattformübergreifende GUI

Nicht jede grafische Erweiterung ist für verschiedene Plattformen verfügbar. Es sind in Python zahlreiche Schnittstellen vorhanden, um richtige X - Programme zusammenzuschreiben. Davon sind einige wieder nur auf für bestimmte Betriebssysteme verfügbar. Andere gehen auch für mehrere Plattformen. Ich will hier nur zwei hervorheben. Die erste der beiden  geht über Tcl/Tk, wobei diese Programme dann auch unter Windows laufen können, wenn dort Tcl/Tk vorhanden ist. Das wird aber bereits beim Installieren des Pythonstandardpaketes für Windows mitgebracht. Um mit Tk pythongemäß arbeiten zu können, gibt es eine spezielle Schnittstelle, Tkinter. Dabei habdelt es sich um ein Modul, das die Tk-Funktionen auf die Pythonsprache adaptiert (Wrapper).
Eine andere GUI wird durch wxPython angeboten, das auf wxWindows aufsetzt. Dies ist ebenfalls für Windows und Linux verfügbar.



5 Hinweise zum Starten von Python - Scripten


5.1 aus der Kommandozeile


In der Kommandozeile ist eigetlich alles klar. Wir geben einfach ein:

python meinprogramm.py

und in unserem Terminalfenster ist alles zu sehen. Aber wir werden noch sehen, dass es moderner geht.



5.2 aus Idle


Entwerfen wir gerade ein Modul, ist Idle ideal. Es bringt die Syntax farbig, meldet Fehler, bietet einen Debugger. Aber Vorsicht! Wenn wir ein fertiges Programm laden, das wie sehr oft am Ende solch eine Konstruktion aufweist wie:

if __name__ == '__main__': 
# und hier geht es weiter
dann gibt es mit dem Starten des Programms Schwierigkeiten. Diese Zeile soll eigentlich helfen, dass dieses Modul den Hauptteil nur ausführt, wenn es als 'main' gestartet wird, also selbst das Programm ist. Wird es hingegen als Modul durch ein anderes Programm mitbenutzt, dann dient es nur als 'Funktions- oder Objektsammlung' und der Teil 'main' wird nicht ausgeführt. In der Idle heißt unser Modul aber nicht 'main' sondern es heisst so, wie sein Dateiname. Daher läuft unser Modul hier nie als Programm vollständig! Es gibt aber Abhilfe, wir geben im interaktiven Interpreterfenster ein:

>>> import meinprogramm

und es geht doch.


5.3 Magic-Line

Wie unter Linux üblich, werden ausführbare Scripten mit dem entsprechenden Attribut versehen und in der ersten Zeile wird ein Hinweis eingetragen, welches Programm dies Script audführen soll. Mit dem Eintrag

 #! /usr/bin/env python

wird das Programm env aufgerufen, das den mitgegebenen Parameter zur Ausführung bringt. Die Einleitung #! weist hier nicht auf einen Kommentar, sondern auf eine sogenannte Magic-Line hin, die festlegt, zu welchem Programm unser Script gehört. Nun können wir die Datei durch Angabe des Namens aufrufen. Tun wir dies nun in einer grafischen Oberfläche, z.B. KDE, indem wir das Icon anklicken, folgt die Enttäuschung sogleich. Das Programm blitzt kurz auf und ist weg. Gab es einen Fehler? Nun ja, es war ein Denkfehler. Das Programm ist schon fertig. Es hat seine Ausgabe auf den Bildschirm gebracht und sich dann beendet. Dies trifft natürlich nicht für Programme zu, die eine eigene shell beinhalten, die Kommandos erwartet und sich erst mit quit beendet. Aber bei einfachen Programmen, die einfach nur ein Ergebnis zeigen sollen, tritt der Effekt des Verschwindens auf. Auch hier geht es ganz einfach. Wir fügen am Ende des Programms etwas ein, wie z.B.

warte = raw_input('beenden mit <enter>')

und schon verschwinden die Ergebnisse erst, wenn wir nach dem Lesen <enter> drücken.


5.4 Zuordnung von Scripten zum ausführenden Programm unter KDE

Es geht auch noch anders. Klicken wir unter KDE das Icon unseres Scriptes mit der echten Maustaste an, können wir auswählen 'öffnen mit ...'. Hier öffnet sich ein Fenster, was nicht nur erlaubt, ein Programm, z.B. Python auszuwählen, sondern man kann auch festlegen, dass dieser Dateityp immer wieder mit Python geöffnet werden soll und dass sich KDE das merken soll. Wieder ein Hauch von Windows.