FAQ Häufig im deutschen Python-Forum gestellte Fragen.

Hier wird erklärt wie du am besten mit Python starten kannst.

Inhalt

Wie fange ich als Einsteiger an?

Windows: Du brauchst erstmal nur den Installer von python.org und schon kann es losgehen. Die Installation ist kinderleicht.

Unices: Python wird meist als Paket angeboten, auf sehr vielen Systemen ist es vorinstalliert. Wie es letztendlich installiert wird, hängt von deinem System ab, wir empfehlen dir aber es über dein Paketmanagement zu installieren und nicht aus den Quellen zu kompilieren, da dies nicht ganz trivial ist.

Wer direkt mit Webprogrammierung anfangen möchte -- was eigentlich erst dann richtig sinnvoll ist, wenn man Python etwas kennt -- der sollte sich die Seite Python und die Webentwicklung durchlesen.

Wenn du Fragen hast, dann bist du im deutschen Python-Forum herzlich willkommen!

Deutschsprachige Lektüren im Netz

Eine Liste mit deutschsprachigen Python-Büchern findest du im wiki.python.org.

Deutsche Mailinglisten / Newsgroups

Was sind die minimal Vorgaben für meinen Code?

Zu jeder Regel gibt es Ausnahmen. Die müssen aber gründlich überlegt und begründet sein.

Wo finde ich Informationen zum Python-Befehl XY?

Schau in die Doku ;-)

Online kann man im Modul-Index oder im alphabetischen Index fündig werden. Ein gutes Werkzeug zum Durchsuchen der Online-Dokumentation nach Befehlen bietet pyhelp, wobei man sich auch noch die Python Sidebar für Mozilla zur Hilfe nehmen kann und dann ist man eigentlich schon wunderbar ausgerüstet.

Sehr praktisch ist es auch, sofern es der Browser unterstützt, sich spezielle Bookmarks zu erstellen (wobei das Schlüsseltwort beliebig ist):

So muss man nur noch mod modulname oder z.B. pyhelp suchwort in die Adressleiste tippen und kommt sofort auf die Dokumentation zum entsprechenden Modul bzw. zum Suchergebnis. Schneller und einfacher geht es nicht mehr.

Python selbst bietet einen eingebauten Hilfe-Befehl namens pydoc, wenn Du also z.B. die Doku zum Modul sys haben willst, gib einfach pydoc sys im Terminal ein. Wenn du pydoc mit pydoc -g aufrufst, startet es einen eingebauten Webserver, über den du die Quellcode-Dokumentation aller installierten Module mit dem Webbrowser durchforsten kannst.

Außerdem gibt es die Funktion help(), mit der man sich zu jedem Befehl/Objekt eine Hilfeseite anzeigen lassen kann:

   1 help("dir")

   1 def test():
   2     """ Das ist der Docstring """
   3     print "Ende"
   4 
   5 help(test)

Wenn man gerne Hilfe in proprietären Formaten liest, dann kommt man sicherlich auch mit der CHM-Referenz gut zurecht. Inzwischen gibt es auch Nicht-Windows-Programme die dieses Format lesen können, somit kann man auch unter anderen Betriebssystem diese Dokumentation verwenden. Allerdings sind diese Programme bisher noch nicht besonders ausgereift und einige Funktionen fehlen bisher. Daher ist die Online-Dokumentation immer noch die beste Informationsquelle.

Wo finde ich Beispiele/Module/Links?

Python hat zwar schon von Werk aus eine mächtige Sammlung an Modulen für alle möglichen Bereiche ("batteries included"), jedoch kommt es manchmal vor dass man Funktionalität braucht, die nicht mitgeliefert wird. Nun kann man diese Funktionalität entweder selbst programmieren oder ein fertiges Modul verwenden. Geht natürlich nur wenn jemand so ein Modul schon geschrieben hat, jedoch ist die Wahrscheinlichkeit recht groß. Nun, wo findet man diese Module?

Die wichtigsten externen Zusatzmodule findest du hier im Wiki unter Module.

Eine umfangreiche und sortierte Liste von Codesnippets ist auf Tags/Codesnippets zu finden. Ansonsten lohnt sich eine Suche im Python-Cookbook praktisch immer.

Die aktuellsten Module findet man im Python Package Index (kurz PyPi; vormals Cheese Shop), der von Tag zu Tag umfangreicher wird. Zur Zeit sind dort über 11.000 Einträge vorhanden. Mittels Easy Install kann man recht einfach Module installieren.

Eine etwas ältere Anlaufstelle sind die Vaults of Parnassus, denen Cheese Shop immer mehr den Rang abläuft. Jedoch schadet eine Suche dort sicher nicht.

Wenn du eine recht große Linkliste zu Python-Themen suchst, dann solltest du auch einen Blick in Leonidas' Linkliste werfen: sie enthält viele unter Python getaggte Links. Dort ist alles Mögliche zu finden: Dokumentation, Module, Diskussionen und das alles systematisch geordnet. Durch die Tags sind die Links noch weiter eingerenzbar, somit findet sich dort sicher irgendetwas von Interesse.

Wie starte ich Skripte?

Linux-Benutzer sind wahrscheinlich schon meist mit der Antwort python skript.py in der Shell gut bedient und wissen worum es geht.

Windows-Benutzer sind den Umgang mit der Kommandozeile oft noch nicht so sehr gewöhnt, deswegen hier mal eine kleine Einleitung mit einigen guten Tipps. Zuerst einmal ist es nötig zu wissen, wo Python installiert wurde, das heißt, wo man das Programm python.exe findet. In dieser Kurzanleitung gehen wir davon aus, dass python.exe im Ordner C:\Programme\Python\ installiert wurde und dass der Benutzer ein Windows XP hat (bei anderen Windows-Systemen sind die Schritte ähnlich).

Zuerst muss Windows klar gemacht werden, wo es den Python-Interpreter suchen soll. Dazu klickt man in der Systemsteuerung auf System. Im sich öffnenden Dialog geht man auf den Registerreiter Erweitert und dort auf den Knopf Umgebungsvariablen und dort wählt man unter Systemvariablen Path aus. Dann klickt man auf Bearbeiten. Nun öffnet sich ein kleines Fenster, din dem viele Dateipfade eingetragen sind. Man sollte dort in unserem Beispiel C:\Programme\Python eingeben. Es ist wichtig die Pfade voneinander mit Semikolon (;) abzutrennen! Nun noch mit OK bestätigen. Dann die DOS-Box schließen und neu öffnen. Die Path-Variable kann in der DOS-Box durch Eingabe von PATH[Enter] überprüft werden.

Nun erstellt man einen leeren Ordner, irgendwo wo man ihn wiederfindet. In diesem Ordner erstellt man eine neue Verknüpfung. Als Speicherort gibt man nur cmd ein und bei Namen kann man es entweder bei cmd belassen oder auch so etwas wie Kommandozeile oder Shell schreiben. Nachdem diese Verknüpfung angelegt ist, klickt man die Eigenschaften dieser Verknüpfung an, und löscht bei Ausführen in: den Wert %windir% und lässt ihn leer. Nun noch mit OK bestätigen.

Dies war ein einmaliger Vorgang, nachdem man dies gemacht hat, kann man nun seine Skripte in diesen Ordner kopieren, die Kommandozeile über die Verknüpfung öffnen und dort python skriptname.py eintippen und kann so die Skripte starten. Fertig!

Wo gibt es einen Python-Compiler?

Zunächst, Python wird vor der Ausführung kompiliert, und zwar in Python-spezifischen Bytecode. Dieser wird dann wiederum von einer virtuellen Maschine interpretiert.

Normalerweise ist bei dieser Frage mit einem Compiler allerdings ein Programm gemeint, das Quellcode einer Programmiersprache in äquivalente Maschinencodeanweisungen für einen echten Prozessor (im Gegensatz zu einer virtuellen Maschine) übersetzt. Für Python gibt es so einen Compiler nicht, es existieren aber diverse "Umwege".

Interessant ist zum Beispiel Cython, das Python-Code in C-Code übersetzt, der dann wiederum kompiliert werden kann. Dabei wird hauptsächlich die virtuelle Maschine umgangen, d.h. Python-Konstrukte werden direkt in die entsprechenden C-API-Calls übersetzt. Man kann allerdings auch Spracherweiterungen nutzen, die eine direkte Übersetzung von Python in C ohne Python-eigene Datentypen erlauben.

Wenn es lediglich um das Verpacken von Code in ausführbare Dateien geht, bieten Python und seine Module für mehrere Anwendungsmöglichkeiten ähnliche Funktionalität an:

Ich möchte mein Script in eine ausführbare Datei packen um es einfacher verteilen zu können

Es gibt Programme die dafür sorgen, Python-Skripte ohne das Vorhandensein eines Python-Interpreters ausführbar zu machen:

Relativ neu ist die Weiterentwicklung von Gordon McMillan's Python Installer, der nun PyInstaller heißt. Dieser kann Archive für Windows- und Unix-artige Systeme erzeugen. Eine Einführung bietet das ShowMeDo-Video. Darüber hinaus ist der Pyinstaller in der Lage, Single-file-Executables zu erzeugen. Dazu findet man unter PyInstaller-Tutorial für Windows eine gute Wiki-Anleitung.

Für Windows sind hierzu py2exe und cx_Freeze nützlich, die ein (ausführbares) Archiv mit Python-Interpreter und eigenem Code/Modulen erzeugen, welches dann verteilt werden kann.

Ein kleiner Vergleich zwischen dem PyInstaller und py2exe wurde im Forum http://www.python-forum.de/post-64359.html#64359 angestoßen.

Weiterhin kann IronPython eigenständige EXE- und DLL-Dateien erstellen, allerdings ist die Funktion noch in einem frühen Stadium und erstellt auch keinen Maschinencode sondern Code, der nur auf der virtuellen Maschine von Microsofts .NET ausführbar ist und die entsprechenden Bibliotheken zur Ausführung zwingend benötigt.

Interessant ist sicherlich auch Portable Python, welches Python "mobil" macht, um es z.B. auf einem USB-Stick unterzubringen.

Oft kommt der Wunsch nach einer EXE daher, dass man seinen Freunden das Skript geben moechte, die aber kein Python installiert habe. Also warum keine EXE machen? Als Alternative bietet sich evtl. auch an ein eigenes kleines Mini-Python zu basteln und einfach alles zusammen zu packen und zu verschicken. Tipps dazu: http://www.python-forum.de/viewtopic.php?t=3666

Eine weitere Möglichkeit wäre es evtl. ein komplettes installations Paket für Windows zu bauen. Dazu könnte man die freie Software NSIS (Nullsoft Scriptable Install System) oder Inno Setup nutzten.

Die Geschwindigkeit von CPython reicht mir nicht

Oft ist Python wirklich schnell genug. Solltest du dir aber dennoch die obrige Frage gestellt haben, dann lies dir mal die Seite Python performance gut durch ;-)

Ich will aber unbedingt einen Compiler!

Wenn Du noch immer unbedingt einen Compiler möchtest gehörst Du wahrscheinlich zu der Fraktion, die unbedingt verhindern möchte, dass ein Endanwender den Quellcode Deiner Anwendung zu Gesicht bekommt. Lies hierzu erst einmal Warum ist quelloffene Software nicht böse, und überleg Dir dann noch einmal ob Du unbedingt Maschinencode haben willst. Wenn dem immer noch so ist, dann ist Python nichts für Dich.

Als unvollkommenen Schutz gegen unbedarfte neugierige Blicke kann man ein Python-Programm nur als Bytecode-Dateien (.pyc u. .pyo-Dateien) verteilen, die der Python-Interpreter anstelle der .py-Dateien direkt ausführen kann. Am besten man nimmt dabei .pyo-Dateien, die mit -OO erzeugt wurden, dabei werden nämlich auch die Docstrings herausoptimiert (Zu beachten ist aber, das man keine asserts zur allgemeinen Fehlerbehandlung nutzen darf, diese werden auch wegoptimiert.)

Sei dir aber bewusst, dass es relativ trivial ist, aus dem Bytecode den Quellcode und die Funktionsweise der Software zu rekonstruieren! ("reverse engineering"). Für das Wiederherstellen des Sourcecodes gibt es decompyle. Eine alte freie Version existiert, mit der man Bytecode bis Python v2.3 wiederherstellen kann. Weiterentwickelt wird decompyle als kommerzieller Service, der auch spätere Python-Versionen unterstützt.

Python selbst bietet mit dem dis Module Einblicke in den Bytecode. Siehe auch: Blog Artikel (en) und das online Tool pyc_xray.

Übrigens haben andere Programmiersprachen dasselbe Problem, auch wenn sie kompiliert werden. Natürlich ist es aufwendiger, ein C-Programm mit einem Decompiler oder Disassembler zurückzuwandeln (Siehe auch Reverse Engineering für Neugierige). Aber es ist möglich. Der einzige sichere Weg dies zu verhindern, wäre, keine Sourcen und binäre Dateien herauszugeben und das Programm als Web-Service bzw. als SaaS anzubieten.

Was ist PyPy?

Das PyPy-Projekt arbeitet daran, den Python Interpreter selber in Python zu schreiben. Bisher ist es z.B. so, dass der Kern von CPython in C und Jython in Java geschrieben ist. Das PyPy-Team hat jedoch den Python Interpreter komplett in (einer Untermenge von) Python selber geschrieben, so dass er unabhängig von C ist. PyPy hat einige Vorteile gegenüber des herkömmlichen Python:

Mehr Informationen findes du auf der PyPy-Seite hier im Wiki oder im dseWiki (de), sowie im Python-Forum.

Wo finde ich kompilierte Module für aktuelle Pythonversionen?

Module findet man im Python Package Index (das grobe Äquivalent zu Perls CPAN) unter pypi.python.org/pypi. Einige inoffizielle Builds sind auf der Seite Windows Binaries zu finden.

Wie schreibe ich Programme mit GUI-Oberfläche?

Dazu gibt es verschiedenste GUI-Toolkits. In der Standarddistribution von Python.org wird Tkinter mitgeliefert. Da aber Tk einige Nachteile hat, sind einige nennenswerte Alternativen entstanden, wie das universelle wxPython, eine Anbindung an wxWidgets, das einfache und mächtige PyGTK (Anbindung an GTK) und PyQt (Anbindung an Qt).

Obwohl Tk einige Einschränkungen hat, bietet es sich für kleine bis mittlere Programme an. Da es zum Lieferumfang der Standard-Python-Distribution gehört, hat es den größten Verbreitungsgrad. Dennoch gibt es Linux-Distributionen, die Tkinter nicht zur Standardinstallation beipacken und User, die die separaten Tkinter-Pakete nicht installieren ;-) Besonders für Einsteiger ist Tkinter geeignet, da es allgemein als einfachstes GUI-Toolkit gilt. Mit dem GUI Builder existiert eine sehr einfache Möglichkeit seine GUI visuell zusammen zu bauen.

Einen Überblick über Vor- und Nachteile der jeweiligen Toolkits findest du im Python Wikibook.

Welche GUI-Editoren gibt es?

Ja nach GUI-Toolkit hat man verschiedene Möglichkeiten, welche Editoren man nutzen kann.

Welche Editoren werden für Python empfohlen?

Mit Python selber wird eine integrierte Entwicklungsumgebung (IDE) namens IDLE mitgeliefert. IDLE ist für verschiedene Plattformen verfügbar, schlicht und einfach zu bedienen und daher insbesondere für Einsteiger geeignet.

Wer auf der Suche nach einer umfangreicher ausgestatteten IDE ist, wie etwa das vor allem von Java bekannte Eclipse, der kann Eclipse gleich weiternutzen, denn PyDev ist ein Plugin, mit dem man Python-Unterstützung nachladen kann. Neben den Standardfeatures eines Editors integriert es sich mit dem Quellcode-Checker PyLint oder dem Refactoring-Tool BicycleRepairMan und dadurch sehr umfangreich und mächtig ist. Einige nette Features werden aber in die kostenpflichtigen "PyDev Extensions" auslagert (grafischer Debugger etc.). Eine ähnliche Integration in die andere große Java-IDE, NetBeans ist mit dem nbpython-Plugin möglich.

Eine andere, komplett in Python geschriebene IDE ist Detlev Offenbachs Eric4, daneben existieren auch SPE und DrPython als freie, kostenlose und platformunabhängige Alternativen.

Außerdem existiert noch die kostenpflichtige Komodo IDE, die allerdings durch die Personal License stark eingeschränkt ist. /!\ Es ist aber inzwischen im Begriff, Open Source zu werden, die ersten Betaversionen kann man unter http://www.openkomodo.org herunterladen.

Natürlich gibt es auch "generische" Editoren, die spezielle Python-Modi mitbringen und damit fast zur Entwicklungsumgebung werden. Emacs und Vim sind zwei Beispiele, die oft von fortgeschrittenen Python-Programmierern bevorzugt werden. Ein weiterer kleiner und empfehlenswerter Editor ist SciTE. Für mehr Informationen zu diesem Thema, siehe Tags/Editoren

Eine super Erweiterung für einige Editoren ist BicycleRepairMan. Dieses Tool hilft einem grandios, mal flugs einen Block Code in eine Funktion auszulagern oder z.B. eine Klasse oder Funktion umzubenennen, so dass alle Aufrufe auch entsprechend mit geändert werden, Stichwort: Refactoring.

Da es so viele Editoren gibt, hat XT@ngel einige dieser Editoren im Forum vorgestellt, wobei diese Übersicht natürlich nicht komplett ist und es auch nie sein kann. Einen sehr guten Überblick über verfügbare Editoren bietet jedoch auch die (zwar nur in englischer Sprache verfügbare, jedoch wegen der übersichtlichen tabellenartigen Zusammenstellung auch für deutsche Leser brauchbare) PythonEditors-Seite des PythonInfo-Wiki.

Wie kann ich auf Objekte/Variablen aus anderen Dateien zugreifen (Stichwort ''import'')?

Informationen wie man Klassen auslagert, wie man Module importiert, findest du unter Import.

Ausgaben auf Konsole: Was ist der Unterschied zwischen print und sys.stdout.write()?

Der Unterschied zwischen print und sys.stdout.write() wird auf der Seite Daten in der Konsole ausgeben erklärt.

Gibt es einen Unterschied zwischen `[]`/`list()` bzw. `{}`/`dict()`?

Ja. Die Literalformen ([]/{}) sind eindeutig, d.h. sie geben immer eine Liste bzw. ein Dict zurück und zudem noch schneller:

Aber: Beide Punkte machen in normalem Code keinen Unterschied. Namen von Builtins zu überschreiben ist verpönt, und die paar µs Geschwindigkeitsvorteil fallen nicht ins Gewicht. Dadurch wird die Frage zur Geschmackssache.

`global` funktioniert nicht so, wie ich mir das vorstelle.

Siehe Die global-Anweisung.

Was ist der Unterschied zwischen einem Vergleich mit `is` und einem mit `==`?

Während "==" auf Gleichheit prüft und dieses Verhalten mittels der "Underscore" Methode "__eq__" vollständig selbst implementierbar ist, prüft "is" auf Objektidentität. Dieses Verhalten von "is" ist nicht anpassbar. Ein Objekt, das unter zwei verschiedenen Namen ansprechbar ist, ist "objektidentisch". Zwei Objekte können höchstens gleich sein, niemals aber identisch.

"None" prüft man deswegen mit "is", weil es ein sogenanntes Singleton ist, es also im gesamten Python Prozess immer nur ein einziges Exemplar von "None" gibt. CPython hinterlegt (cached) Instanzen von manchen der grundlegenden Objekttypen wie int und bool, weswegen ein Vergleich mit "is" bei Werten wie 1, -1, 0, True, False funktioniert. Auf dieses Verhalten sollte man sich nicht verlassen!

Wie schreibe ich gute Programme?

Diese Frage ist zwar sehr pauschal, aber es gibt durchaus einige Ratschläge die man befolgen kann, um ein Programm möglichst gut hinzubekommen. Dies fängt schon allein bei der Form an. Da es für die FAQ zu lang wäre, all diese Tipps detailiert aufzulisten, findet sich unter Entwurfsmuster ein Artikel zu diesem Thema.

Ich habe Probleme mit mod_python

Gerade Einsteiger verwechseln mod_python mit mod_php und meinen, dass man unbedingt mod_python für die Web-Entwicklung benötigt. Dies ist jedoch falsch! mod_python, FastCGI und Co. sind nur für den performanten Produktiveinsatz einer Webanwendung bestimmt. Zum Entwickeln sind diese Interfaces nicht gut geeignet und stören eher.

Daher bringen die meisten Web-Frameworks einen eingebauten Webserver (meist basierend auf dem Modul BaseHTTPServer) mit, der nützliche Features zum Entwickeln hat, z.B. beim Ändern einer Quelldatei die Anwendung neu lädt.

Erst wenn eine Web-Applikation "fertig" ist und auf einem öffentlichen Web-Server eingesetzt werden soll, muss man sich um das Thema der Serverumgebung kümmern. Für WSGI gibt es für nahezu jede Technik (mod_python, FastCGI, SCGI, AJP) einen passenden Adapter. Oft hört man jedoch von Problemen mit mod_python, unsere Empfehlung ist daher, lieber FastCGI oder direkt WSGI zu nutzen.

Es gibt inzwischen ein durchaus empfehlenswertes WSGI-Modul für Apache, wenig überraschend heißt es mod_wsgi. Nicht nur Apache besitzt ein Modul für WSGI, der kleine Web-Server nginx bietet ebenfalls ein mod_wsgi, das man verwenden kann um Python-WSGI-Anwendungen auszuführen.

Wie ändere ich Daten in Dateien?

Oft möchten User ein paar Strings aus Dateien verändern. Diese grundsätzliche Aufgabe kann man in zwei Herangehensweisen bewältigen:

  1. Komplettes einlesen der Datei, verarbeiten und wieder in Originaldatei speichern.
  2. Datei häppchenweise einlesen, verarbeiten und in einer zweiten Datei speichern.

Diese beiden Varianten unterscheiden sich in zwei Aspekten: Wird die Datei komplett in den Speicher geladen, wird evtl. der Hauptspeicher knapp, wenn die Daten zu groß sind. Außerdem werden die Originaldaten überschrieben. Läuft etwas bei der Verarbeitung falsch, ist am Ende evtl. nur Datenmüll übrig. Wer auf Nummer sicher gehen will, sollte also erstmal die Originaldatei umbenennen, die Daten einlesen, verarbeiten und in einer neuen Datei speichern. Wenn alles geklappt hat, kann man die alte Datei löschen oder überlässt das dem Anwender.

Wie verarbeite ich Webseiten?

Manchmal kommt es vor, dass es Webseiten gibt, aus denen man bestimmte Informationen auslesen will. Dieser Vorgang nennt sich Scraping und sollte nur angewendet werden, wenn es keine Möglichkeit gibt, die Informationen auf anderem Wege zu bekommen wie durch öffentliche APIs (XML-RPC/SOAP). Manchmal reicht es auch aus, auf RSS-/XML-Feeds zurückzugreifen. Das Scrapen des HTML-Codes funktioniert nur so lange gut, wie die Webseite sich nicht signifikant verändert, dabei ist es ein wenig die Kunst den Scraping-Code so zu schreiben, dass er sich auf möglichst unveränderliche Daten in der Webseite stützt.

In der Regel wird der Inhalt der Seite mittels urllib heruntergeladen. Diese Webseite kann nun von einer HTML-Bibliothek verarbeitet werden. Oft wird hierfür BeautifulSoup verwendet, mit dem man an die gewünschten Informationen kommen kann indem man nach bestimmten Tag sucht und unwichtige ausfiltert. Eine etwas robustere Alternative dazu ist die html5lib die eine HTML-Seite nach HTML 5-Regeln parst und wahlweise einen minidom, ElementTree oder BeautifulSoup-Baum zurückgibt. Praktisch ist es jedoch auch html5lib mit lxml zu kombinieren. lxml bietet einem die Möglichkeit sehr genau festzulegen auf welche Elemente man zugreifen möchte. Dazu unterstützt lxml die beiden "Abfragesprachen" CSS-Selectors (diese sind recht einfach verständlich und entsprechen denen in CSS-Dateien) und XPath welche mächtiger, aber auch komplizierter ist. Schlussendlich bringt lxml einen eigenen HTML-Parser mit, lxml.html so dass man nicht unbedingt html5lib benötigt, wenn man vor der Aufgabe steht, etwas HTML einzulesen.

Zu bedenken ist jedoch, dass manche Seitenbetreiber es nicht wünschen, dass ihre Seiten gescraped werden! Man sollte bei eigenen Programmen bedenken einen eigenen User-Agent in seinem Programm zu verwenden und robots.txt auszuwerten. Es ist nur fair, sich dennoch wenn es geht an die Bitte des Betreibers halten, Provider wie Google stellen kostenlos APIs bereit, mit denen man die Suche ohne Scrapen verwenden kann.

Wie logge ich mich auf einer Webseite ein?

Wenn man urllib verwendet kann man sich nicht "einfach so" auf Webseiten anmelden, wie das mit einem normalen Browser möglich ist, denn urllib schickt von selbst und beachtet keine Cookies. Dies kann man zwar selbst programmieren aber es ist eher lästig. Als Lösung steht hier mechanize bereit, welches eine Art programmierbarer Mini-Browser in Python ist, der sich auf Webseiten anmelden kann. mechanize ist recht einfach zu nutzen, die Beispiele auf der Webseite zeigen wie man in wenigen Minuten einen Website-Login in Python hinbekommt.

Wie starte ich Prozesse?

Oft wird geraten os.system() zu verwenden, jedoch ist dieses seit der Einführung von subprocess gar nicht mehr nötig. Subprocess ersetzt fast alle in Python möglichen Arten weitere Prozesse zu starten durch ein einheitliches Popen-Objekt, welches eine komfortable Kommunikation mit Prozessen ermöglicht.

Warum funktionieren importierte Module nicht?

Manchmal kommt es vor, dass man ein Modul importiert und das, im Gegensatz zu dem was in der Dokumentation oder in Tutorials steht, das Modul keine solchen Funktionen/Namen hat und stattdessen beim Zugriff ein AttributeError geworfen wird. Dies liegt oft daran, dass man unwissenderweise statt das richtige Modul zu importieren sein eigenes Modul importiert. So funktioniert beispielsweise der Zugriff auf subprocess nicht, wenn man sein eigenes Programm subprocess.py genannt hat. Daher sollte man sichergehen, dass das Skript anders heißt als das Modul das man importiert! Als Lösung sollte man das Skript umbenennen und auch etwaige <Skriptname>.pyc oder <Skriptname>.pyo ebenfalls löschen. Danach sollte das gehen.

Die Erklärung des Verhaltens ist ganz simpel. In Python ist jede Datei zugleich auch ein Modul. Wenn man nun ein Modul importiert wird dieses Modul im Modul-Suchpfad sys.path gesucht. Meist steht in diese Suchpfad ganz vorne ein ., das den aktuellen Ordner repräsentiert, somit wird zuerst im aktuellen Ordner gesucht und versucht, dort das Modul zu finden. Wenn nun das Skript genauso heißt wie das gewünschte Modul, wird zuerst das Skript gefunden und statt dem gewünschten Modul geladen, was zu AttributeError führen kann, da die Attribute auf die man zugreift logischerweise nicht im Skript vorhanden sind. Zu erkennen ist es daran, dass im Traceback im letzten Segment der Fehler auf die aktuelle Skriptdatei zeigt.

Tags: Umsteiger | Grundlagen

FAQ (zuletzt geändert am 2015-08-13 09:39:45 durch JensDiemer)