[[Vorlage(Überarbeitung, 6.10.2014, Python, noisefloor)]] [[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Rechte:Rechte von Dateien ändern] }}} [[Inhaltsverzeichnis(2)]] [[Bild(python.png, align=left)]] Python ist eine interpretierte, objektorientierte höhere Programmiersprache mit dynamischer Typisierung und Bindung. Sie wurde Anfang der 1990er-Jahre von [wikipedia:Guido_van_Rossum:Guido van Rossum] entwickelt. Heute ist Python auf vielen [http://www.python.org/download Plattformen] {en} (z.B. Linux, Unix, OS X, Windows) verfügbar und wird unter Ubuntu für viele zentrale Programme, wie z.B. das [:Software-Center:], benutzt. Python ist, neben C, die offizielle Entwicklersprache von Canonical für Ubuntu. Python Code ist (eine installierte Python-Version vorausgesetzt) direkt ausführbar, d.h. man muss nicht manuell kompilieren. Im Hintergrund wird dabei der Code zuerst in einen plattformunabhängigen Bytecode übersetzt, welcher dann von einem Interpreter ausgeführt wird. Dies geschieht für den Benutzer unsichtbar im Hintergrund. Seit Beginn seiner Entwicklung folgt Python zwei grundlegenden Prinzipien: 1. Einfachheit: Die Syntax von Python ist einfach und verständlich, so dass sich auch Ein- und Umsteiger schnell zurecht finden. Um die Übersichtlichkeit zu erhöhen, erfolgt die Strukturierung von Anweisungsblöcken nicht mit '';'' oder Klammern, sondern durch Einrückung. 1. Freiheit: Objektorientierung wird in Python vollständig unterstützt, erzwingt aber keine objektorientierte Programmierung. Python unterstützt zusätzlich verschiedene Programmierstile, wie imperatives, strukturelles, funktionelles oder aspektorientiertes Programmieren.\\ Zusätzlich verfügt Python neben den eingebauten Funktionen und Typen über eine umfangreiche Standardbibliothek mit Paketen zu den verschiedensten Problemstellungen. Sie reichen von der XML- und HTML-Verarbeitung bis hin zu Funktionen, welche bei der Bearbeitung wissenschaftlicher Probleme helfen. Dies bedeutet bei der Erstellung eines Quellcodes häufig eine erhebliche Zeitersparnis. = Installation = Python ist bei einer Ubuntu-Installation bereits enthalten, da auch Systemkomponenten Python benötigen. Das Paket {{{#!vorlage Paketinstallation python }}} enthält die grundlegenden Pakete der vom System aktuell verwendeten Version. In Ubuntu 10.04 [:Lucid Lynx:] liegt Python standardmäßig in der Version 2.6 vor. Seit 11.04 [:Natty Narwhal:] kommt Version 2.7 zum Einsatz. Die Dokumentation ist online verfügbar. In Ubuntu gibt es sie auch als Paket zum Offline-Lesen: {{{#!vorlage Paketinstallation python-doc }}} Sie ist unter [file:///usr/share/doc/python-doc/html/index.html] zu finden. Möchte man Python 3 (siehe [#Python-2-vs-3 Python 2 vs. 3] weiter unten) installieren, so muss man das Paket {{{#!vorlage Paketinstallation python3 }}} installieren. Ein Parallelinstallation zu Python 2 ist unter Ubuntu / Linux ohne Probleme möglich. Das Paket mit der Dokumentation ist entsprechend {{{#!vorlage Paketinstallation python3-doc }}} == Python und Apache == Zur Nutzung in Kombination mit dem Webserver [:Apache:] muss noch folgendes Paket installiert werden: {{{#!vorlage Paketinstallation libapache2-mod-wsgi }}} Nach der Installation muss das Modul aktiviert werden: {{{#!vorlage Befehl sudo a2enmod wsgi }}} Dann muss die Datei '''/etc/apache2/sites-available/default''' mit Root-Rechten geöffnet und bearbeitet [4] werden. Dort findet man ziemlich am Anfang: {{{#!code apache ... }}} Dort ergänzt man folgendes (Pfade nach Bedarf anpassen): {{{#!code apache WSGIScriptAlias /alias /var/www/test/python/wsgi.py WSGIPythonPath /var/www/test/python Order deny,allow Allow from all }}} Damit steht '''wsgi.py''' unter der URL `http://SERVER-IP_ODER_NAME/alias` zur Verfügung. = Python 2 vs. 3 = Seit Anfang 2009 ist Python 3 verfügbar. In Python 3 hat es keine "grundlegenden" Veränderungen der Sprache gegeben, allerdings wurden viele kleine "Unzulänglichkeiten" und "Ungereimtheiten" von Python 2.x beseitigt. Dies bedingt aber, dass Python 3 Code nicht unter 2.x läuft - und umgekehrt. Die Veränderungen betreffen auch schon Anfänger bei ihren ersten Programmen. So ist `print` unter Python 2 ein Statement und somit ist folgender Code korrekt: {{{#!code python print 'hello, world!' }}} Unter Python 3 führt der Code zu einem Syntaxfehler, da `print` nun eine eingebaute Funktion ist und dementsprechend benutzt werden muss: {{{#!code python print('hello, world!') }}} Auch die Funktion für die Standardeingabe hat sich verändert: Unter Python 2 gibt es einmal `raw_input` die den Text von der Standardeingabe einliest und zurückgibt, als auch eine zweite Funktion `input` die ebenfalls den Text von der Standardeingabe einliest ihn aber auch sogleich als Python Code interpretiert und ausführt. Unter Python 3 dagegen heißt die erste Funktion `input` und das Verhalten der zweiten kann man durch` eval(input())` erreichen. Das kann besonders Anfänger verwirren wenn sie Python 2 und Python 3 Literatur miteinander vermischen. Eine Übersicht über alle Neuerungen in Python 3 findet man [http://docs.python.org/py3k/whatsnew/3.0.html hier] {en}. Mit dem im Juli 2010 erschienen Python 2.7 ist die letzte Version der 2.x Serie erschienen. Dies soll noch über einen längeren Zeitraum unterstützt werden, Details findet man in den [http://docs.python.org/dev/whatsnew/2.7.html#the-future-for-python-2-x Release Notes] {en}. Außerdem sind weitere Änderung der Version 3 nach 2.7 zurück portiert worden, um einen "sanften" Übergang zu erhalten. Das größte "Problem" von Python 3 ist, dass eine Reihe von Modulen und auch "große" Anwendungen noch nicht auf Python 3 portiert worden sind, weshalb Python 2.x noch vielerorts - inklusive Ubuntu - im Einsatz ist. Die Frage, ob man lieber in Python 2 oder 3 programmieren wird auf der Seite [http://wiki.python.org/moin/Python2orPython3 Python 2 or 3] {en} im Python-Wiki ausführlich sowie im folgenden Abschnitt kurz erläutert. == Welche Version nehmen? == Diese Frage ist relativ einfach zu beantworten: Python 3 ist ohne Frage die Zukunft von Python. Ist man ein Neuling in Python und hat nicht vor, in nächster Zeit an einem Programm mitzuarbeiten, das noch unter Python 2 läuft, sollte man Python 3 lernen. Sind alle benötigten Zusatzmodule bereits für Python 3 verfügbar, so ist dies ebenfalls die erste Wahl. Fehlen noch notwendige Module, sollte man weiterhin auf Python 2 setzen. Beim Programmieren kann man dann natürlich darauf achten, dass man möglichst wenig Python 2 spezifische Sprachkonstrukte verwendet bzw. diese sich leicht nach Python 3 portieren lassen. Dabei kann auch das Programm [#2to3 2to3] helfen. == 2to3 == Seit der Python Version 2.5 ist das Kommandozeilenprogramm `2to3` in der Standardinstallation von Python 2 enthalten. Mit dessen Hilfe lassen sich Python 2 Programme sehr einfach auf Python 3 Tauglichkeit testen bzw. auf Wunsch auch automatisch konvertieren. Die Benutzung ist dabei recht simpel. Im einfachsten Fall ruft man `2to3` nur mit dem Namen eines Pythonskripts als Parameter auf: {{{#!vorlage Befehl 2to3 mein_programm.py }}} und erhält als Ausgabe Vorschläge, was zu ändern ist, wie z.B.: {{{ RefactoringTool: Skipping implicit fixer: buffer RefactoringTool: Skipping implicit fixer: idioms RefactoringTool: Skipping implicit fixer: set_literal RefactoringTool: Skipping implicit fixer: ws_comma RefactoringTool: Refactored test_static.py --- mein_programm.py (original) +++ mein_programm.py (refactored) @@ -3,7 +3,7 @@ from bottle import route, static_file, template, run, debug -print 'Starte Programm...' +print('Starte Programm...') @route('/test') def test(): }}} In diesem Beispiel wird vorgeschlagen, dass man in der Zeile 3, Position 7, das `print` Statement aus Python 2 durch die print-Funktion aus Python 3 ersetzen soll. Ruft man `2to3` mit der Option `-w` auf, sie werden die Änderungen direkt in der Datei durchgeführt, die alte Datei wird mit der Endung '''.bak''' als Sicherung angelegt. Weitere Hinweise zu `2to3` findet man in der [http://docs.python.org/library/2to3.html Python Dokumentation] {en}. = Programme erstellen = Um Programme mit Python zu erstellen, gibt es drei Wege, welche im Folgenden kurz besprochen werden. Dies ist die Arbeit mit * der interaktiven Pythonkonsole - der Code wird bei der Eingabe sofort ausgeführt * [:Editoren:] und Konsole - der Code wird in einem Editor erstellt und über die Konsole ausgeführt * [:Entwicklungsumgebungen:] - alle Bestandteile, um ein Programm zu erstellen, sind in einer Umgebung zusammengefasst = Die interaktive Konsole = Die Arbeitsweise einer Konsole ist ähnlich der [:Shell:] [3] für Linux. Sie ist vor allem zum Testen von kleineren Abschnitten des Quelltextes nützlich, da die eingegebenen Befehle sofort ausgeführt werden. Für Einsteiger gibt es eine besonders benutzerfreundliche (bzw. einsteigerfreundliche) Variante namens [:bpython:]. == Start == Die interaktive Konsole wird gestartet durch [3] {{{#!vorlage Befehl python }}} Es erscheint zuerst eine kurze Meldung zur Python Version, dann kommt der Interaktive Prompt `>>>`, wo man nun Befehle eingeben kann. {{{#!code pycon Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> }}} == "Hallo Welt" in Python == Der Standardweg, um Python-Programme zu erstellen, geht über einen Editor. Editoren bieten viele Hilfen wie Syntaxhervorhebung, automatische Einrückung und Funktionen zu verkleinern. Daher gibt es auch eine riesige Zahl von Programmen, es kann also jeder einen Editor seiner Wahl finden. Es wird der Quelltext im bevorzugten Editor [4] erstellt und als '''*.py''' abgespeichert. {{{#!code python #!/usr/bin/env python # Mein Hallo-Welt-Programm fuer Python 2 print 'Hallo Welt!' }}} Für Python 3 sieht das Programm minimal anders aus: {{{#!code python #!/usr/bin/env python3 # Mein Hallo-Welt-Programm fuer Python 3 print('Hallo Welt!') }}} Als Beispiel sei der Quellcode unter '''~/hallowelt.py''' abgespeichert. Nun öffnet man das Terminal [3] und wechselt in das Verzeichnis der Quelldatei. In diesem Ordner kann man sodann durch eine einzige Befehlszeile den Code ausführen {{{#!vorlage Befehl python hallowelt.py }}} Macht man die '''hallowelt.py''' Datei noch ausführbar[5], dann kann man das Programm auch per {{{#!vorlage Befehl ./hallowelt.py }}} starten. == Nützliche Befehle == Um in der Konsole zu arbeiten, gibt es einige sehr hilfreiche Befehle von Python. Sie werden an einem kurzen Beispiel erklärt {{{#!vorlage Befehl >>> dir() }}} Es wird eine Auflistung aller der Konsole bekannten Variablen ausgegeben {{{#!vorlage Befehl >>> import os >>> help(os) }}} Es wird das Modul ``os`` importiert. Somit erhält man viele Möglichkeiten, um Informationen über das System zu erhalten. Mit ``help(os)`` wird eine kommentierte Übersicht aller im Modul enthaltenen Klassen und Methoden ausgegeben. == Anpassungen == Die interaktive Konsole lässt sich anpassen, indem man eine Datei verwendet, die bei jedem interaktiven Start ausgeführt wird (ähnlich zur [:Bash/bashrc:bashrc-Datei] der [:Bash:]). Dazu muss in der Shell die Umgebungsvariable `PYTHONSTARTUP` auf den gewünschten Dateinamen gesetzt werden (hier '''.pythonrc''' im [:Homeverzeichnis:]): [3] {{{#!vorlage Befehl export PYTHONSTARTUP=~/.pythonrc }}} Damit man den `export`-Befehl nicht in jeder neu geöffneten Konsole wieder manuell ausführen muss, trägt man ihn am besten am Ende der [:Bash/bashrc:bashrc]-Datei ein. [4] Nun muss man nur noch die Datei '''~/.pythonrc''' mit einem Editor erstellen und die gewünschten Python-Befehle eintragen. [4] Beispielsweise könnte man oft benötigte Module importieren lassen: {{{#!code python import os import sys }}} === Code-Completion === Es ist sehr praktisch, auch in der interaktiven Konsole eine automatische Vervollständigung des Codes zu nutzen. Dazu wird, wie z.B. auch bei der [:Bash:], '''readline''' genutzt. Allerdings wird in der interaktiven Python-Konsole [[Vorlage(Tasten, Tab)]] normalerweise für Einrückungen mit dem Tabulator-Zeichen genutzt. Für die automatische Vervollständigung ist hier das Drücken von [[Vorlage(Tasten, Esc)]] gefolgt von [[Vorlage(Tasten, Tab)]] vorgesehen (genau genommen: `Meta-tab`). Man kann allerdings auch eine andere Taste bzw. Tastenkombination für die Code-Completion nutzen. Dazu bearbeitet man die in der Umgebungsvariablen `PYTHONSTARTUP` angegebene Datei mit einem Editor und fügt folgendes ein: [4] {{{#!code python try: import readline except ImportError: print("Module readline not available.") else: import rlcompleter readline.parse_and_bind("TASTE: complete") # TASTE ersetzen }}} Statt `TASTE` muss man dabei die gewünschte Taste bzw. Tastenkombination angeben, bspw. `C-o` bzw. `Control-o` für die normalerweise ungenutzte Tastenkombination [[Vorlage(Tasten, Strg+O)]]. Wenn man `tab` für [[Vorlage(Tasten, Tab)]] angibt, bleibt für das echte Tabulatorzeichen trotzdem immer noch [[Vorlage(Tasten, Strg+I)]]. Mehr Informationen findet man in der [:Manpage:] von `readline` und der Beschreibung [http://tutorial.pocoo.org/interactive.html im Python-Tutorial] {de}. = Weiterführende Literatur = Es gibt eine Vielzahl freier, sehr guter und im Internet verfügbarer Einführungen und Tutorials für Python. Einige davon sind unter [:Python#Tutorials: Python#Tutorials] zu finden. Allgemein empfiehlt es sich für jeden Anfänger in Python einen Blick in den offiziellen [http://wiki.python.org/moin/BeginnersGuide BeginnersGuide] zu werfen um zu entscheiden wie er mit Python starten will. == Tutorials == === Python 3 === * [http://docs.python.org/py3k/tutorial/ offizielles] {en} Python Tutorial * [http://swaroopch.com/notes/Python_en-Preface/ A Byte of Python] {en} sehr gute und einsteigerfreundliche Einführung in Python === Python 2 === * [http://docs.python.org/tutorial/ offizielles] {en} Python Tutorial * [http://www.ibiblio.org/swaroopch/byteofpython/read/ A Byte of Python] {en} sehr gute und einsteigerfreundliche Einführung in Python * [http://abop-german.berlios.de/ Deutsche Übersetzung] {de} von "A Byte of Python" * [http://de.wikibooks.org/wiki/Python_unter_Linux Wikibook Python unter Linux] {de} - Einführung in Python speziell unter Linux * [http://www.greenteapress.com/thinkpython/thinkpython.html Think Python - How to Think Like a Computer Scientist] {en} - Frei verfügbare, elektronische Vorabversion von "How to Think Like a (Python) Programmer" = Links = == Intern == * [:pep8:] - Python-Code auf PEP8 Konformität testen * [:pip:] - die aktuell bevorzugte Methode, Pakete aus dem Python Package Indes zu installieren, deinstallieren und zu aktualisieren * [:virtualenv:] - mehrere (virtuelle) Python-Umgebungen parallel installieren * [:Bottle:] - WSGI-basierte Webanwendungen mit Python erstellen * [:couchdb-python:] - CouchDB Anbindung für Python * [:Pygame:] - Sammlung von Pythonmodulen zur Spieleprogrammierung * [:Python Setuptools:] - die ältere Methode, Python Pakete aus dem Python Package Index installieren * [:Quickly:] - GTK-basierte Anwendungen in Python für Ubuntu erstellen und veröffentlichen * [:ReportLab:] - PDF-Dateien aus Python-Skripten heraus erzeugen * [:SQLAlchemy:] - sehr leistungsfähig Datenbank-Anbindung und Objekt-relationaler Mapper für Python * [:Sphinx:] - System zur Generierung von (Programm-) Dokumentationen mit direkter Anbindung an Python == Extern == * [http://www.python.org/doc/faq/ Python FAQ] {en} * [http://py-tutorial-de.readthedocs.org/de/python-3.3/ deutschsprachiges] {de} Python-Tutorial * [http://wiki.python.org/moin/IntegratedDevelopmentEnvironments Entwicklungsumgebungen für Python (IDE)] {en} * [http://pythonide.blogspot.de/ SPE IDE - Stani's Python Editor] {en} * [http://www.python-forum.de/ Python-Forum] {de} - sehr gute Anlaufstelle für alle einfachen und schwierigen Probleme rund um Python * [http://wiki.python.de/ Deutsches Python Wiki] {de} * [http://www.dokuwelt.de/tutorials_artikel.php?themenID=44&kategorieID=1 Dokuwelt.de] - Linksammlung zu (meist) deutschsprachigen Python-Anleitungen {de} #tag: Programmierung, Python