open source library Das Python Praxisbuch Open Source Software wird gegenüber kommerziellen Lösungen immer wichtiger. Addison-Wesley trägt dieser Entwicklung Rechnung mit den Büchern der Open Source Library. Administratoren, Entwickler und User erhalten hier professionelles Know-how, um freie Software effizient einzusetzen. Behandelt werden sowohl Themen wie Betriebssysteme, Netzwerke und Sicherheit als auch Programmierung. Eine Auswahl aus unserem Programm: Diese Neuauflage wurde auf die Debian GNU/Linux-Version 4 »Etch« hin aktualisiert und überarbeitet. Sie wendet sich an Nutzer, die vielleicht schon eine Linux-Distribution ausprobiert haben, aber dennoch eine grundlegende Einführung benötigen. Autor Frank Ronneburg bietet genau das: einen Einstieg in alle Bereiche der täglichen Arbeit mit Debian – von der Installation auf verschiedensten Plattformen über Netzwerkeinsatz, Office- und Grafikanwendungen bis hin zu Multimedia. Ein Schwerpunkt des Buchs liegt auf der Debian-eigenen Paketverwaltung apt-get. Frank Ronneburg Debian GNU/Linux 4-Anwenderhandbuch ISBN 978-3-8273-2523-5 768 Seiten Euro 49,95 (D), 51,40 (A) Der aktualisierte Nachdruck der 8. Auflage preisgünstig als Studentenausgabe mit 3 DVDs: Fedora 9, openSUSE 11 (32/64-Bit), Ubuntu 8.04 LTS »Hardy Heron« Michael Kofler Linux ISBN 978-3-8273-2752-9 1344 Seiten Euro 39,95 (D), 41,10 (A) We nn ein Buch den Aufstieg von Linux im deutschsprachigen Raum begleitet hat, dann dieses: Michael Koflers »Linux«-Buch, auch schlicht »der Kofler« genannt. Seit mehr als zehn Jahren gilt dieses Buch als DAS Standardwerk für Linux-Einsteiger und Anwender: Es richtet sich an alle, die ihr Betriebssystem nicht nur einsetzen, sondern auch hinter die Kulissen blicken möchten. Das Buch ist in acht Teilen gegliedert: 1. Einführung und Installation: Gnome, KDE 4 2. Linux im Büro: Webbrowser, Email-Clients, OpenOffice.org, Digitalkameras, Scanner, Bildverwaltung, Gimp 2.4, Audio und Video 3. Unix/Linux-Werkzeuge: Prozessverwaltung, Dateiverwaltung, Netzwerk-Tools, Vim, bash (Shell) 4. Systemkonfiguration/-Administration und Entwicklung: Software- und Paketverwaltung, Bibliotheken, Java und Mono, X, Administration des Dateisystems, Kernel und Module 5. Netzwerk- und Server-Konfiguration: LAN, WLAN, VPN, Modem, ISDN, ADSL, Internet-Gateway, Masquerading, DHCP, Nameserver, Firewall, SELinux, AppArmor, Apache, PHP, MySQL, FTP, SSH, CUPS, Samba, NFS 6. Wine, Xen, VMware & Co. 7. Distributionen: Details zu Debian/GNU Linux 4.0, Fedora 9, Knoppix 5.3, Red Hat Enterprise Linux 5, openSUSE 11 und Ubuntu 8.04 8. Referenz: Thematisch, alphabetisch open source library Farid Hajji Das Python Praxisbuch Der große Profi-Leitfaden für Programmierer An imprint of Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das ® Symbol in diesem Buch nicht verwendet. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem PE-Material. 10 9 8 7 10 09 08 6 5 4 3 2 1 ISBN 978-3-8273-2543-3 c 2008 by Addison-Wesley Verlag, ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Straße 10–12, D-81829 München/Germany Alle Rechte vorbehalten Lektorat: Boris Karnikowski, [email protected] Korrektorat: Annette Glaswinkler, www.sprache-und-text.de Herstellung: Monika Weiher, [email protected] Satz: PTP-Berlin Protago-TEX-Production GmbH, (www.ptp-berlin.eu) Druck: Kösel, Krugzell, (www.KoeselBuch.de) Printed in Germany open source library Inhaltsübersicht Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teil I Die Python-Umgebung xvii 1 Python installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Die Python-Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3 Hello, World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Teil II Python-Grundlagen 87 4 Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 7 Dictionarys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 9 Dateien und das Dateisystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 10 Klassen und Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 11 Python und C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 1 Teil III Anwendungen 435 12 XML und XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 13 Persistenz und Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 14 Netzwerkprogrammierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 open source library Inhaltsübersicht 15 Webprogrammierung und Web-Frameworks . . . . . . . . . . . . . . . . . . . 747 16 GUI-Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 17 Python für Wissenschaftler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255 vi open source library Inhaltsverzeichnis Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teil I Die Python-Umgebung 1 1 Python installieren . . . . . . . . . . . . . . . . . . 1.1 Python auf Unix . . . . . . . . . . . . . . . . 1.1.1 Python ohne root-Rechte installieren 1.2 Python auf Windows . . . . . . . . . . . . . 1.3 Mehrere Python unter einem Dach . . . . . . 1.4 Drittanbietermodule installieren . . . . . . . 1.5 1.6 xvii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 5 6 9 11 1.4.1 Einfache .py Dateien . . . . . . . . . . . 1.4.2 distutils-kompatible Packages . . . . . 1.4.3 Packages ohne root-Rechte installieren setuptools, Eggs und ein Käse-Shop . . . . . . . 1.5.1 setuptools installieren . . . . . . . . . . 1.5.2 Ein Käse-Shop mit vielen Leckereien . . 1.5.3 ZODB3 mit easy_install hinzufügen . . . 1.5.4 easy_install benutzen . . . . . . . . . . 1.5.5 Was sind Eggs? . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 12 12 14 14 20 20 23 24 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 30 33 34 2 Die Python-Shell . . . . . . . . . . . . . . . 2.1 Die Qual der (Python-Shell-) Wahl . . 2.1.1 Python-Shells unter Unix . . 2.1.2 Python-Shells unter Windows 2.2 Ein Taschenrechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . open source library Inhaltsverzeichnis 2.3 2.4 Auf Erkundungstour . . . . . . . . . . . . . . . . 2.3.1 Introspektion mit dir, type und __doc__ 2.3.2 Das Hilfesystem help . . . . . . . . . . 2.3.3 Das Dokumentationstool pydoc . . . . . Zusammenfassung . . . . . . . . . . . . . . . . 3 Hello, World! . . . . . . . . . . . . . . . . . . . . 3.1 Das Hello, World!-Programm . . . . . . . . 3.1.1 hello.py verstehen . . . . . . . . . 3.1.2 hello.py unter Unix ausführen . . . 3.1.3 hello.py unter Windows ausführen 3.1.4 hello.py in IDLE ausführen . . . . . 3.2 3.3 3.4 hello2.py mit sys.argv . . . . . . . . 3.2.1 hello2.py verstehen . . . . 3.2.2 hello2.py ausführen . . . . 3.2.3 hello2.py unterm Debugger tkhello.py mit Tkinter . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 40 44 52 56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 59 60 61 67 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 70 72 73 77 84 Teil II Python-Grundlagen 87 4 Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Die Grundzahlentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 89 4.2 4.3 4.4 Dezimalzahlen mit dem decimal-Modul . . . . . Zufallszahlen mit dem random-Modul . . . . . . 4.3.1 Zufallszahlen aus dem Mersenne Twister 4.3.2 Zufallszahlen aus einer Entropiequelle . Zusammenfassung . . . . . . . . . . . . . . . . 5 Strings . . . . . . . . . . . . . . . 5.1 Einfache Bytestrings . . . . 5.1.1 String-Literale . . . 5.1.2 String Interpolation 5.1.3 String Slices . . . . 5.1.4 String-Operatoren . 5.1.5 String-Methoden . . 5.2 Unicode-Strings . . . . . . . 5.2.1 Warum Unicode? . . viii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 107 109 113 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 117 118 119 123 124 125 127 127 5.3 5.2.2 Unicode-Encodings . . . . . . . . . . 5.2.3 Der unicode-Datentyp . . . . . . . . . 5.2.4 Codieren und Decodieren von Unicode 5.2.5 Codecs . . . . . . . . . . . . . . . . . Reguläre Ausdrücke . . . . . . . . . . . . . . . 5.3.1 Was sind reguläre Ausdrücke? . . . . 5.3.2 re.search und re.sub . . . . . . . . . . 5.3.3 Kompilierte reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 129 130 132 134 134 135 137 5.3.4 Das Match-Objekt . . . . 5.3.5 Die Flags . . . . . . . . . 5.3.6 findall und finditer . . . . Anwendungen . . . . . . . . . . . 5.4.1 Suchen in Strings . . . . 5.4.2 Strings effizient aufbauen Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 140 141 142 142 143 145 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 149 152 153 160 164 164 6.5.2 Listen kopieren und vergleichen 6.5.3 Listen sortieren . . . . . . . . . 6.5.4 List comprehensions . . . . . . . 6.5.5 Das DSU-Idiom . . . . . . . . . . 6.5.6 Stabiles Sortieren . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 170 175 177 178 180 7 Dictionarys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 Dictionary-Literale . . . . . . . . . . . . . . . . . . . . . . 7.2 Dictionarys abfragen und verändern . . . . . . . . . . . . 7.2.1 Was tun bei nicht-existierenden Einträgen? . . . 7.2.2 Wie verändert man Dictionarys? . . . . . . . . . 7.2.3 Dictionarys mit Default-Initialwerten (setdefault) 7.3 Dictionarys durchlaufen . . . . . . . . . . . . . . . . . . . 7.3.1 Dictionarys effizient durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 183 186 189 190 194 196 200 5.4 5.5 6 Listen . . . . . . . . . . . . . . . . . 6.1 Zugriff auf Listenelemente . . 6.2 Listen-Slices . . . . . . . . . . 6.3 Memberfunktionen von Listen 6.4 Built-in-Funktionen für Listen . 6.5 Anwendungen . . . . . . . . . 6.5.1 Listen durchlaufen . . 6.6 . . . . . . . . . . . . . . ix open source library Inhaltsverzeichnis open source library Inhaltsverzeichnis 7.4 7.5 7.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 205 211 212 213 216 221 8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1 Funktionen aufrufen . . . . . . . . . . . . . . . . . . . 8.2 Funktionsparameter . . . . . . . . . . . . . . . . . . . 8.3 Rückgabewerte . . . . . . . . . . . . . . . . . . . . . 8.4 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1 Lokale und globale Namensräume verstehen 8.5 Ein Blick unter die Haube . . . . . . . . . . . . . . . . 8.6 Factory-Funktionen und -Closures . . . . . . . . . . . 8.7 Dekoratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 224 226 230 230 232 234 240 241 8.7.1 Dekoratoren manuell erstellen . . . . . . . . . . . . . . . . . . 8.7.2 Das decorator-Modul . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 248 257 7.7 8.8 Dictionarys kopieren . . . . . . . . . . . Anwendung: word count . . . . . . . . . Iteratoren und Generatoren . . . . . . . . 7.6.1 Was ist ein Iterator? . . . . . . . 7.6.2 Einen eigenen Iterator schreiben 7.6.3 Generatoren . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . 9 Dateien und das Dateisystem . . . . . . . . . . 9.1 Dateien . . . . . . . . . . . . . . . . . . 9.1.1 Die Funktion open . . . . . . . . 9.1.2 Die Funktion close . . . . . . . . 9.1.3 Textdateien lesen und schreiben 9.2 9.3 x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 259 260 266 268 9.1.4 Binärdateien lesen und schreiben . 9.1.5 RAM-Dateien mit StringIO . . . . . . 9.1.6 Memory mapped Dateien mit mmap 9.1.7 Spezielle Dateiformate . . . . . . . Das Dateisystem . . . . . . . . . . . . . . . 9.2.1 Dateien verschieben oder löschen . 9.2.2 Metadaten einer Datei . . . . . . . . 9.2.3 Das Dateisystem durchlaufen . . . . 9.2.4 Das shutil-Modul . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 283 286 291 300 301 301 307 315 316 10 Klassen und Objekte . . . . . . . . . . . . . . . . . . . . . 10.1 Hello, OO-World! . . . . . . . . . . . . . . . . . . . 10.2 Klassen verwenden . . . . . . . . . . . . . . . . . . 10.2.1 Objekte instanziieren . . . . . . . . . . . . 10.2.2 Objektattribute . . . . . . . . . . . . . . . 10.2.3 Objektmethoden (Memberfunktionen) . . . 10.3 Klassen schreiben . . . . . . . . . . . . . . . . . . . 10.3.1 Klassenmethoden und statische Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 319 320 320 322 324 327 333 10.5 10.3.2 Klassenvererbung . . . . . . . . . . . . . . . Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.1 Eine Einführung in Hooks . . . . . . . . . . . 10.4.2 Eine Tour der object-Hooks . . . . . . . . . . 10.4.3 Ein Dictionary mit case-insensitive Schlüsseln 10.4.4 Ein Dictionary mit Default-Werten . . . . . . 10.4.5 Ein aufrufbares Objekt . . . . . . . . . . . . . 10.4.6 Propertys . . . . . . . . . . . . . . . . . . . . 10.4.7 Deskriptoren . . . . . . . . . . . . . . . . . . 10.4.8 __slots__ . . . . . . . . . . . . . . . . . . . . Metaklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 339 339 340 344 346 348 350 353 360 364 10.6 10.5.1 Klassen sind Instanzen von Metaklassen 10.5.2 Das __metaclass__-Attribut . . . . . . . 10.5.3 Anwendungen von Metaklassen . . . . Zusammenfassung . . . . . . . . . . . . . . . . 10.4 11 Python und C/C++ . . . . . . . . . . . . . . 11.1 ctypes . . . . . . . . . . . . . . . . . 11.1.1 Die ctypes-Datentypwrapper 11.1.2 Komplexe Datentypen . . . . 11.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 368 370 374 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 378 379 382 11.1.3 C-Funktionen aufrufen . . . . . SWIG . . . . . . . . . . . . . . . . . . . 11.2.1 SWIG installieren . . . . . . . . 11.2.2 SWIG aufrufen . . . . . . . . . 11.2.3 Konstanten und Variablen . . . 11.2.4 Stringmanipulationen . . . . . 11.2.5 Strukturen . . . . . . . . . . . 11.2.6 C++-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 400 401 403 408 416 419 422 xi open source library Inhaltsverzeichnis open source library Inhaltsverzeichnis 11.3 11.4 11.5 11.2.7 Unbekannte Datentypen sind Pointer . 11.2.8 Wie geht’s von hier aus weiter? . . . . Boost.Python . . . . . . . . . . . . . . . . . . Low-level Python/C-API . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teil III Anwendungen 435 12 XML und XSLT . . . . . . . . . . . . . . . . . . . . . 12.1 Eine XML-Datei . . . . . . . . . . . . . . . . 12.2 xml.etree.ElementTree . . . . . . . . . . . . 12.3 4Suite-XML . . . . . . . . . . . . . . . . . . 12.3.1 4Suite-XML installieren . . . . . . . 12.3.2 Die 4Suite-XML-Skripte . . . . . . . 12.3.3 Ft.Xml.InputSource-Eingabequellen 12.3.4 DOM . . . . . . . . . . . . . . . . . 12.3.5 SAX . . . . . . . . . . . . . . . . . . 12.4 12.5 . . . . . . . . . 437 438 440 447 448 450 456 457 466 Transformationen mit XSLT . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 471 13 Persistenz und Datenbanken . . . . . . . . . . . 13.1 Serialisieren und Deserialisieren . . . . . . 13.1.1 Ein naiver Versuch mit str und eval 13.1.2 Die richtige Lösung mit pickle . . . 13.2 Persistente Dictionarys mit anydbm . . . . 13.2.1 Eine naive suboptimale Lösung . . 13.2.2 Die richtige Lösung mit anydbm . . 13.3 13.4 13.5 13.6 xii 426 430 430 431 432 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 474 474 476 479 480 481 13.2.3 Besonderheiten von anydbm-Dictionarys 13.2.4 Die anydbm-Architektur . . . . . . . . . . Mehr Flexibilität mit bsddb . . . . . . . . . . . . . Persistente Datenstrukturen mit shelve . . . . . . 13.4.1 Eine umständliche Lösung . . . . . . . . . 13.4.2 Die shelve-Lösung . . . . . . . . . . . . . Die ZODB-objektorientierte Datenbank . . . . . . 13.5.1 ZODB installieren . . . . . . . . . . . . . 13.5.2 Die ZODB benutzen . . . . . . . . . . . . Ein Blogs-Backend mit ZODB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 485 486 490 491 493 498 498 499 508 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 513 517 518 521 522 522 526 13.8.4 Anwendung: Verwaltung von MP3-Metadaten . PostgreSQL-Anbindung mit psycopg2 . . . . . . . . . . 13.9.1 Was ist PostgreSQL? . . . . . . . . . . . . . . . 13.9.2 PostgreSQL installieren . . . . . . . . . . . . . 13.9.3 psycopg2 installieren . . . . . . . . . . . . . . 13.9.4 psycopg2 benutzen . . . . . . . . . . . . . . . 13.9.5 Anwendung: MP3-Metadaten unter PostgreSQL 13.10 MySQL-Anbindung mit MySQLdb . . . . . . . . . . . . . 13.10.1 MySQL-Datenbank vorbereiten . . . . . . . . . 13.10.2 MySQL-python installieren . . . . . . . . . . . 13.10.3 MySQL-python benutzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 540 540 541 555 559 563 566 566 569 571 13.10.4 Anwendung: MP3-Metadaten unter MySQL 13.11 Der objektrelationale Mapper SQLObject . . . . . . 13.11.1 Was sind objektrelationale Mapper? . . . . 13.11.2 SQLObject installieren . . . . . . . . . . . . 13.11.3 SQLObject benutzen . . . . . . . . . . . . . 13.11.4 Das Blog-System mit SQLObject . . . . . . 13.11.5 django.db, ein anderer ORM . . . . . . . . 13.12 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 577 577 578 580 588 594 595 14 Netzwerkprogrammierung . . . . . . . . . . . . . . . . . . . . . . . . 14.1 Das Twisted Framework . . . . . . . . . . . . . . . . . . . . . . 14.1.1 Twisted installieren . . . . . . . . . . . . . . . . . . . 14.1.2 Erste Schritte ins Twisted-Universum . . . . . . . . . . 14.1.3 Zeilenpufferung und ein einfacher Dialog . . . . . . . 14.1.4 Anwendung: Ein Chat-Server . . . . . . . . . . . . . . 14.1.5 Deferred oder: Wenn ein Ergebnis auf sich warten lässt 14.1.6 Passwort-geschützte Bereiche mit cred . . . . . . . . 14.1.7 Twisted AMP (Asynchroneous Messaging Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 600 601 603 613 620 625 635 646 13.7 13.8 13.6.1 Comment, Article und Blog . . . . 13.6.2 Das Blog-Backend BlogDB . . . . DB-API 2.0 SQL-Anbindungen . . . . . . . 13.7.1 Eine kurze DB-API 2.0-Einführung . SQLite-Anbindung mit sqlite3 . . . . . . . 13.8.1 sqlite3 benutzen . . . . . . . . . . 13.8.2 Das sqlite3-Tool . . . . . . . . . . 13.8.3 Das sqlite3-Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.9 . . . . . . . . . . . . . . . . xiii open source library Inhaltsverzeichnis open source library Inhaltsverzeichnis 14.2 14.1.8 Ein Schnelldurchlauf durch die Twisted-Protokolle . 14.1.9 Twisted und Datenbanken . . . . . . . . . . . . . . 14.1.10 Wie findet man sich in Twisted zurecht? . . . . . . Module der Python Standard Library . . . . . . . . . . . . . 14.2.1 Server mit SocketServer schreiben . . . . . . . . . 14.2.2 FTP mit ftplib.FTP . . . . . . . . . . . . . . . . . . 14.2.3 Mails senden mit smtplib.SMTP . . . . . . . . . . . 14.2.4 Mails abholen mit poplib.POP3 und imaplib.IMAP4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 680 680 683 683 690 692 694 14.2.5 Newsreader mit nntplib.NNTP . . 14.2.6 Telnet-Clients mit telnetlib.Telnet Verteilte Programme . . . . . . . . . . . 14.3.1 Twisted Perspective Broker . . . 14.3.2 XML-RPC . . . . . . . . . . . . . 14.3.3 asyncore/asynchat . . . . . . . Low-level-Programmierung mit Sockets . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 699 700 701 711 722 730 742 15 Webprogrammierung und Web-Frameworks . . . . . . . . 15.1 Webserver in Python . . . . . . . . . . . . . . . . . 15.1.1 Webserver aus der Python Standard Library 15.1.2 Webserver aus Drittanbietermodulen . . . . 15.2 Integration mit anderen Webservern . . . . . . . . . 15.2.1 Lighttpd . . . . . . . . . . . . . . . . . . . 15.2.2 Apache . . . . . . . . . . . . . . . . . . . . 15.3 WSGI . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.1 Was ist WSGI? . . . . . . . . . . . . . . . . 15.3.2 WSGI-Tools . . . . . . . . . . . . . . . . . . 15.4 Low-level-Programmierung mit CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 754 754 764 800 803 816 832 833 839 841 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841 842 844 847 851 854 864 896 907 14.3 14.4 14.5 15.4.1 15.4.2 15.4.3 15.4.4 15.4.5 15.4.6 15.4.7 15.4.8 15.4.9 xiv . . . . . . . . . . . . . . . . . . . . . . . . Hello, CGI World! . . . . . . . . . . . . CGI-Umgebungsvariablen . . . . . . . Anwendung: Ein Web-Taschenrechner Ein Formular manuell auslesen . . . . Das cgi-Modul . . . . . . . . . . . . . Anwendung: Dateien uploaden . . . . Den Zustand clientseitig erhalten . . . Den Zustand serverseitig erhalten . . Nachteile von CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 909 914 915 920 921 922 932 15.6.3 XML-basiertes Templating . . . . . . . . 15.6.4 Weitere Templating-Systeme . . . . . . 15.7 Web-Frameworks . . . . . . . . . . . . . . . . . 15.7.1 Django . . . . . . . . . . . . . . . . . . 15.7.2 Weitere Web-Frameworks . . . . . . . . 15.8 Zope, Plone et al. . . . . . . . . . . . . . . . . . 15.8.1 Zope und Plone zusammen installieren . 15.8.2 Erste Schritte in Zope . . . . . . . . . . 15.8.3 Macros in Plone . . . . . . . . . . . . . 15.9 Wikis . . . . . . . . . . . . . . . . . . . . . . . . 15.10 Lose Enden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961 981 982 982 1005 1006 1007 1008 1017 1022 1023 15.11 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023 15.6 Webclients . . . . . . . . . . . . . . . . . . . 15.5.1 Low-level HTTP Protokoll mit httplib 15.5.2 Einfache Webclients mit urllib . . . . 15.5.3 Flexiblere Webclients mit urllib2 . . 15.5.4 Webclients mit Twisted . . . . . . . Templating Engines . . . . . . . . . . . . . . 15.6.1 Templating für arme Leute . . . . . . 15.6.2 Text-basiertes Templating . . . . . . 16 GUI-Toolkits . . . . . . . . . . . . . . . . . . . . . . 16.1 wxPython . . . . . . . . . . . . . . . . . . . 16.1.1 wxPython installieren . . . . . . . . 16.1.2 Erste Schritte in wxPython . . . . . . 16.1.3 Responsive GUIs . . . . . . . . . . . 16.1.4 Schnelle Entwicklung mit RAD-Tools 16.2 PyQt4 . . . . . . . . . . . . . . . . . . . . . 16.3 16.2.1 16.2.2 16.2.3 16.2.4 16.2.5 Tkinter 16.3.1 16.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 1035 1035 1037 1060 1101 1111 PyQt4 installieren . . . . . . . . . . . Erste Schritte in PyQt4 . . . . . . . . . Responsive GUIs . . . . . . . . . . . . Schnelle Entwicklung mit RAD-Tools . eric4, eine PyQt4-IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erste Schritte mit Tkinter . . . . . . . Wie findet man sich in Tkinter zurecht? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112 1118 1126 1134 1142 1143 1144 1146 xv open source library Inhaltsverzeichnis open source library Inhaltsverzeichnis 16.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146 1148 1152 1153 1153 1156 1158 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163 1163 1164 1166 1173 1175 1181 1187 1192 17.1.8 Gleichungen lösen . . . . . . . . . . . . . . . . . . 17.1.9 Pattern Matching . . . . . . . . . . . . . . . . . . . 17.1.10 Lineare Algebra . . . . . . . . . . . . . . . . . . . 17.1.11 Plotting . . . . . . . . . . . . . . . . . . . . . . . . Effiziente numerische Berechnungen mit numpy und scipy . 17.2.1 numpy . . . . . . . . . . . . . . . . . . . . . . . . 17.2.2 scipy . . . . . . . . . . . . . . . . . . . . . . . . . Plotten mit pylab (a.k.a. matplotlib) . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196 1199 1201 1219 1220 1222 1244 1249 1253 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255 16.5 16.6 Text-basierte GUIs . . . . . . . . . . . . . . . . . . . . 16.4.1 pythondialog . . . . . . . . . . . . . . . . . . 16.4.2 Weitere NGUI . . . . . . . . . . . . . . . . . . Low-level APIs . . . . . . . . . . . . . . . . . . . . . . 16.5.1 Ein Blick unter die Haube: Rohe Events . . . . 16.5.2 GUI-Toolkits vereinfachen eine komplexe API Zusammenfassung . . . . . . . . . . . . . . . . . . . 17 Python für Wissenschaftler . . . . . . . . . . . . . . . . 17.1 Das Computer Algebra System sympy . . . . . . . 17.1.1 sympy installieren . . . . . . . . . . . . . 17.1.2 Die Datentypen Rational, Real und Integer 17.1.3 Ein paar Konstanten . . . . . . . . . . . . 17.1.4 Ausdrücke . . . . . . . . . . . . . . . . . 17.1.5 Differenzial- und Integralrechnung . . . . 17.1.6 Polynome . . . . . . . . . . . . . . . . . . 17.1.7 Reihen . . . . . . . . . . . . . . . . . . . 17.2 17.3 17.4 xvi . . . . . . . . . . . . . . . . . . open source library Einführung Willkommen zum Python-Praxisbuch! Was ist Python? Python ist eine Allzweck-Programmiersprache, die verschiedene Paradigmen unterstützt: Objekt-orientiert, imperativ und funktional. Sie ist interpretiert, kann aber in C/C++ und anderen Programmiersprachen erstellte Binary-Module laden und ohne Geschwindigkeitseinbußen ausführen. Eines ihrer besonderen Merkmale, das Umsteigern und vielen erfahrenen Programmierern sofort ins Auge fällt, ist die ungewohnte und zum Teil umstrittene Syntax durch Einrückung, die aber einen maßgeblichen Beitrag zur Lesbarkeit und Wartbarkeit von Python-Code leistet. Die Syntax von Python gilt im Gegensatz zu der anderer Sprachen wie Perl, C++ usw. als minimalistisch. Darum ist Python besonders als Einstiegssprache für Anfänger geeignet. Doch was gut für Anfänger ist, muss nicht schlecht für Fortgeschrittene sein! Zum einen bietet Python so gut wie alle Features, die sich ein Programmiererherz wünschen kann, und zum anderen ist gerade die klare, einfache Syntax maßgeblich entscheidend für die Wartbarkeit von eigenem und fremdem Code. Eine Programmiersprache wäre nur halb so nützlich, wenn sie nicht auch mit einer mächtigen und ausführlichen Standardbibliothek ausgestattet wäre. Aus diesem Grunde wird Python mit einer umfangreichen Sammlung von Modulen ausgeliefert. Diese Sammlung, Python Standard Library genannt, befindet sich überall dort, wo der Python-Interpreter installiert ist. Ihr großer Umfang und ihre Vielseitigkeit haben die Bezeichnung batteries included inspiriert, und es ist auch tatsächlich so: Viele PythonProgramme benötigen nicht mehr als die Standardmodule. Natürlich ist die Python Standard Library (PSL) nur eine Auswahl möglicher Module. In der Praxis wird man je nach Anwendungsgebiet nicht umhin kommen, Drittanbietermodule aus dem Netz herunterzuladen, um so die PSL zu erweitern. Ähnlich wie bei Perls CPAN werden viele dieser Erweiterungsmodule im Cheese Shop PyPI zusammen- open source library Einführung gefasst und können mit einem einzigen Kommando automatisch heruntergeladen, bei Bedarf kompiliert und installiert werden. Abhängigkeiten werden selbstverständlich automatisch berücksichtigt. Warum dieses Buch? In der schnelllebigen Welt der Programmiersprachen ist Python schon ziemlich alt: Sie wurde von Guido van Rossum 1991 erstmals veröffentlicht und hat im Laufe der Jahre immer mehr Anhänger und Anwendungsgebiete hinzugewonnen. Konnte man sich noch in den Anfängen von Python einen guten Überblick verschaffen, ist dies in letzter Zeit aufgrund der großen Zahl neuer Module etwas schwieriger geworden. Ja, Python ist gewachsen und hat sich zu einer ausgereiften Sprache samt eigenem Ökosystem entwickelt! Wer Python erlernen möchte, wird in der Regel auf die Python-Website http://www .python.org/ gehen und dort mit dem hervorragenden Tutorial anfangen. Anschließend heißt es für angehende Pythonistas (wie sich Python-Hacker oft und gern bezeichnen): ab in die ausführliche Dokumentation der Python Standard Library und lesen, lesen, lesen . . . Das Python-Praxisbuch versucht die Lernkurve etwas zu verkürzen, indem es als Wegweiser durch das Labyrinth der vielen Dokumentationsseiten und unzähligen Standard- und Drittanbietermodule dient. Anstatt über alle möglichen Module etwas zu sagen (was von Natur aus schon unmöglich ist und auf ein Abschreiben der Dokumentation hinauslaufen würde), werden wir uns auf eine Auswahl interessanter Module beschränken. Eine solche Auswahl wird immer subjektiv sein, denn sie hängt von den Vorlieben, Neigungen und besonderen Kenntnissen eines Autors ab. Darum wird es immer Module oder ganze Anwendungsgebiete geben, die im Python-Praxisbuch nicht einmal erwähnt werden. Dies ist nicht als Wertung zu verstehen: Es liegt einfach in der Natur der Sache, dass die Seitenzahl und die Zeit zum Schreiben eines Buches beide endliche Ressourcen sind! Wir werden nicht die erwähnten und vorgeführten Module dokumentieren, dies können sie selbst viel besser tun! Sie werden beim Lesen dieses Buches ein Grundprinzip erkennen, das sich wie ein roter Faden durch alle Kapitel zieht: Nachdem wir ein Modul eingeführt haben, demonstrieren wir, wie man mit Hilfe der PythonShell oder des pydoc-Programms das Modul dazu bringen kann, seine Dokumentation preiszugeben. Mit anderen Worten: Wir werden zeigen, wie man sich selbst hilft und Python-Module interaktiv erkunden kann. Dieses interaktive Erkunden von Python-Modulen ist in meinen Augen ein essenzieller Bestandteil der Python-Erfahrung. Gleichgültig, ob Sie ein Standardmodul der PSL xviii oder ein völlig unbekanntes Drittanbietermodul zum ersten Mal benutzen möchten, es wird sich immer die Frage stellen: Was kann ich mit diesem Modul so alles anstellen? Oder noch kürzer: Welche API stellt mir dieses Modul zur Verfügung? Selbstverständlich liest niemand gern API-Dokumentationen. Schließlich können solche endlosen Listen von Funktionen und ihre Signaturen samt zugehörigen Kommentaren sehr öde sein. Python hat aber hier eine gute Alternative gegen die Langeweile: die interaktive Python-Shell! In der Python-Shell kann man u.a. unbekannte Module importieren und anschließend erkunden, indem man ihre Dokumentation aufruft. Doch was interessanter ist: Man kann direkt am Python-Prompt Code-Fragmente ausprobieren, neue Funktionen aufrufen und sofort erkennen, was diese Funktionen zurückgeben. Sind das komplizierte Datenstrukturen, dann kann man sie ebenfalls unter die Lupe nehmen. Der große Umweg, den man bei anderen Programmiersprachen (inklusive manch interpretierter Sprachen wie Perl) nehmen muss, um Datenstrukturen zu inspizieren oder kleine Testprogramme zu schreiben, entfällt bei Python komplett: Ausprobieren kann man direkt am Python-Prompt! Was enthält dieses Buch? Das Python-Praxisbuch gliedert sich in drei Hauptteile: Teil I: Die Python-Umgebung Teil II: Python-Grundlagen Teil III: Anwendungen Der erste Teil zeigt, wie man Python installiert, die Python-Shell bedient, ein einfaches Programm startet und vor allem, wie man sich selbst helfen kann, um z.B. Dokumentation zu finden und anzuzeigen. Bei der Installation von Python hat man die Wahl zwischen einer systemweiten Installation und einer Installation, die nur für einen Benutzer gilt (etwa wenn man keine ausreichenden Schreibrechte auf Systemverzeichnisse besitzt). Wir werden sehen, wie beide Installationen bewerkstelligt werden und nebeneinander koexistieren können. Da Erweiterungsmodule in Python oft C/C++ Code enthalten, werden wir auch im Falle von Windows den MinGW-Compiler installieren und konfigurieren. Außerdem werden wir die setuptools unserer Python-Installation hinzufügen, um Module aus dem Cheese Shop PyPI automatisch herunterzuladen und zu installieren. Die wichtigste Information aus diesem ersten Teil ist es, wie man sich in der PythonShell selbst helfen kann, d.h. wie man neue Module interaktiv erkundet und ihre Dokumentation anzeigen kann. Nachdem Sie den ersten Teil gelesen haben, sollten Sie xix open source library Was enthält dieses Buch?