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.