[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Pakete_installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Rechte:Rechte von Dateien ändern] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/python.png, 64, align=left)]] [wikipedia:Python_(Programmiersprache):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 [https://www.python.org/download Plattformen] {en} (z.B. Linux, Unix, OS X, Windows) verfügbar und wird unter Ubuntu für viele zentrale Aufgaben benutzt. Python ist, neben C, die offizielle Entwicklersprache von Canonical für Ubuntu. Genau genommen bezeichnet "Python" nur die Programmiersprache an sich, es gibt verschiedene [https://www.python.org/download/alternatives/ Implementierungen] {en}. Üblicherweise wird die Referenzimplementierung namens CPython als Python bezeichnet. CPython ist auch die Python-Implementierung, welche Ubuntu (und alle anderen Linux-Distributionen) standardmäßig mitbringt. Eine alternative (und schneller) Implementierung ist z.B. [:PyPy:]. Wenn im Folgenden von "Python" die Rede ist, dann ist damit aber die CPython-Implementierung gemeint. Python-Code ist, eine installierte Python-Version vorausgesetzt, direkt ausführbar, d.h. man muss ihn 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, es wird aber keine objektorientierte Programmierung erzwungen. 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 3 ist in einer Ubuntu-Standardinstallation bereits enthalten, da auch Systemkomponenten Python als Voraussetzung benötigen. Welche Version installiert ist, zeigt der folgende Befehl im Terminal [1]: {{{#!vorlage Befehl python3 -V }}} Python 3 (bei [:Focal:Ubuntu 20.04] Version 3.8, bei [:Bionic:Ubuntu 18.04] Version 3.6) wird ansonsten mit dem folgenden Paket installiert [2]: {{{#!vorlage Paketinstallation python3 }}} == Bestimmte Python3 Versionen= Um eine bestimmte Python3 Version zu installieren, geht man wie folgt vor: {{{#!vorlage Befehl sudo apt install python3.x }}} Zum Beispiel: {{{#!vorlage Befehl sudo apt install python3.9 }}} Jedoch sind nicht in jeder Ubuntu Version auch alle Python-Versionen enthalten. == Python3 als als python aufrufen == Standardmäßig wird der Python3 Interpreter als `python3` aufgerufen, [#Programme_starten siehe unten]. Ab Ubuntu 20.04 besteht die Möglichkeit, dass der Aufruf von `python` Python3 startet. Dazu muss das Paket {{{#!vorlage Paketinstallation python-is-python3 }}} installiert werden. == Manuelle Installation == Wer eine andere Python 3.x Version als die aus den Paketquellen benötigt, kann diese konfliktfrei manuell installieren. Das Vorgehen ist im Artikel [:Python/manuelle Installation:] beschrieben. == Dokumentation == Die Dokumentation für Python ist zwar komplett online verfügbar, kann aber auch als Paket zum Offline-Lesen installiert werden: {{{#!vorlage Paketinstallation python3-doc, Dokumentation zu Python 3 }}} Die Dokumentation ist anschließend unter '''/usr/share/doc/python3.x/html/index.html''' zu finden. = Programme starten = Möchte man ein in Python 3 geschriebenes Programm starten, gibt man folgenden Befehl ein: {{{#!vorlage Befehl python3 PROGRAMMNAME.py }}} Die installierte Python 3 Version wird automatisch gewählt (also 3.8 für Ubuntu 20.04, 3.6 für Ubuntu 18.04). Ist im Python-Programm ein [wikipedia:Shebang:] wie "`#!/usr/bin/env python3`" vorhanden und das Programm als ausführbar deklariert[4], dann lässt es sich auch direkt ausführen oder per Doppelklick im Dateimanager starten: {{{#!vorlage Befehl PROGRAMMNAME.py }}} == Programme starten .desktop Datei == Ein nach '''/opt''' installiertes Programm starten. Möchte man ein in Python 3 geschriebenes Programm über eine .desktop Datei starten, gibt man folgenden Befehl an: {{{#!code text Exec=python3 programm.py Path=/opt/programm/ }}}: = Programme erstellen = Um Programme mit Python zu erstellen, gibt es prinzipiell drei Wege: 1. Die interaktive Python-Konsole - der Code wird bei der Eingabe sofort ausgeführt. Dies wird im Folgenden kurz besprochen. 1. [:Editoren:] und Kommandozeile - der Code wird in einem Editor erstellt und über die Kommandozeile ausgeführt 1. [:Entwicklungsumgebungen:] - alle Bestandteile, um ein Programm zu erstellen, sind in einer Umgebung zusammengefasst = Die interaktive Konsole = Die Arbeitsweise der Konsole ist ähnlich der [:Shell:] 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 durch den folgenden Befehl gestartet: {{{#!vorlage Befehl python3 }}} Es erscheint zuerst eine kurze Meldung zur Python-Version, dann kommt der interaktive Prompt `>>>`, wo man nun Befehle eingeben kann: {{{ Python 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> }}} == "Hallo Welt" in Python == Der Standardweg, um Python-Programme zu erstellen, erfolgt über einen Editor[3]. Manche Editoren bieten praktische Hilfen wie eine Syntaxhervorhebung oder eine automatische Einrückung. Beispiel: Es wird der Quelltext im bevorzugten Editor erstellt und als '''~/hallowelt.py''' im [:Homeverzeichnis:] abgespeichert: {{{#!code python #!/usr/bin/env python3 # Kommentar: Mein Hallo-Welt-Programm fuer Python 3 print('Hallo Welt!') }}} Jetzt kann man das Miniprogramm wie [#Programme-starten weiter oben beschrieben] 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. * Es wird eine Auflistung aller der Konsole bekannten Variablen ausgegeben: [[Vorlage(Befehl, ">>> dir()")]] * 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: {{{#!code python >>> import os >>> help(os) }}} == Anpassungen == Die interaktive Konsole lässt sich anpassen, indem man eine Datei verwendet, die bei jedem interaktiven Start ausgeführt wird (ähnlich zur Datei [:Bash/bashrc:bashrc] der [:Bash:]). Dazu muss in der Shell die Umgebungsvariable `PYTHONSTARTUP` auf den gewünschten Dateinamen gesetzt werden (hier '''~/.pythonrc''' im [:Homeverzeichnis:]): {{{#!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 [3]. Nun muss man nur noch die Datei '''~/.pythonrc''' mit einem Editor erstellen und die gewünschten Python-Befehle eintragen. Beispielsweise könnte man oft benötigte Module importieren lassen: {{{#!code python import os import sys }}} = Python 2 = In den Ubuntu-Paketquellen ist auch Python 2 enthalten, in allen Ubuntu-Version in der Version 2.7, welches die letzte Python-2-Version ist. Der Support von Python 2 wurde am 1.1.2020 durch die Entwickler von Python komplett eingestellt. Da bei Ubuntu 18.04 LTS Python 2 in den ''main''-Quellen ist, will sich Canonical (zusammen mit Debian) bis zum Supportende von 18.04 im April 2023 selber um Sicherheitspatches kümmern, sofern notwendig. Seit Ubuntu 19.10 ist das Python 2 Paket in den "universe" Quellen. Für eigene Programmierprojekte sollte aber kein Python 2 eingesetzt werden sondern ausschließlich Python 3, welches auch durch die Entwickler von Python unterstützt wird. Wer nichtsdestotrotz Python 2 installieren möchte, benötigt das Paket {{{#!vorlage Paketinstallation python2, universe, ab Focal }}} bzw. für Ubuntu 19.10 und davor {{{#!vorlage Paketinstallation python, ab Eoan 19.10 in universe }}} Eine Parallelinstallation von Python 2 und 3 ist problemlos und konfliktfrei möglich. Der Python-2-Interpreter ist über den Befehl `python` aufrufbar. Bis einschießlich Ubuntu 19.10 ruft der Befehl `python` den Python 2 Interpreter auf. Ab Ubuntu 20.04 muss man den Befehl `python2` für Python 2 nutzen. Wer unter Focal und neuer weiterhin Python 2 über den Befehl `python` starten möchte, der muss zusätzlich das Paket {{{#!vorlage Paketinstallation python-is-python2, universe }}} installieren. == 2to3 - Programm von Python 2 nach Python 3 konvertieren == 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 ihre Python-3-Tauglichkeit testen bzw. auf Wunsch auch automatisch konvertieren. Die Benutzung ist dabei recht simpel. Im einfachsten Fall ruft man das Programm 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 das `print`-Statement aus Python 2 durch die print-Funktion aus Python 3 ersetzen soll. Ruft man 2to3 mit der Option `-w` auf, so 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 [https://docs.python.org/library/2to3.html Python-Dokumentation] {en}. = historisches Python = Die älteste verfügbare Python-Version ist 0.9.1, welche auf Mitte 1991 zurück datiert. Wer diese unter Ubuntu ausprobieren möchte, kann sie als [:snap:]-Paket installieren: {{{#!vorlage Befehl sudo snap install python0 --classic }}} Die interaktive Shell kann über `python0` aufrufen. Weitere Informationen zur Historie von Python ist z.B. im englischsprachigen Wikipedia-Artikel [wikipedia_en:History_of_Python:] zu finden. = 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 im nächsten Abschnitt zu finden. Allgemein empfiehlt es sich für jeden Anfänger, einen Blick in den offiziellen [https://wiki.python.org/moin/BeginnersGuide Beginners Guide] {en} zu werfen. == Tutorials == * [https://docs.python.org/py3k/tutorial/ Offizielles Python-Tutorial] {en} - sehr empfehlenswert für den Einstieg in Python * [https://pythonbasics.org Python Basics] {en} - für Python 3 * [https://www.techbeamers.com/python-tutorial-step-by-step/ Python Tutorial to Learn Step by Step] {en} - für Python 3 * [https://greenteapress.com/wp/think-python-2e/ Think Python - How to Think Like a Computer Scientist 2nd Edition] {en} für Python 3 - auch im [https://greenteapress.com/thinkpython2/thinkpython2.pdf PDF-Format] {dl} * [https://www.alphacodingskills.com/python/ Python Tutorial Basics to Advanced] {en} - für Python 3 = Links = == Intern == * [:Nuitka:] - ein Compiler für Python-Programme * [:PyPy:] - Python-Implementierung, welche einen Just-in-Time-Compiler einsetzt und dadurch sehr schnell ist * [:Anaconda:] - Python-Distribution * [:bpython:] - erweiterte Python-Konsole * [:pycodestyle:] - Python-Code auf PEP8-Konformität testen * [:pip:] - die aktuell bevorzugte Methode, Pakete aus dem "Python Package Index" zu installieren, zu deinstallieren und zu aktualisieren * [:venv:] - mehrere (virtuelle) Python-Umgebungen parallel installieren * [:Django:] - Framework zum Entwickeln von Internetapplikationen * [:Bottle:] - WSGI-basierte Webanwendungen mit Python erstellen * [:Flask:] - Alternative zu Bottle ## * [:Pygame:] - Sammlung von Python-Modulen zur Spieleprogrammierung * [:Python Setuptools:] - ältere Methode, um Python-Pakete aus dem "Python Package Index" zu installieren * [:ReportLab:] - PDF-Dateien aus Python-Skripten heraus erzeugen * [:SQLAlchemy:] - sehr leistungsfähige Datenbank-Anbindung für Python * [:Sphinx:] - System zur Generierung von (Programm-)Dokumentationen mit direkter Anbindung an Python * [:numpy:] - Modul, welches eine Klasse zur Handhabung von großen Datenmengen sowie Methoden zum wissenschaftlichen Rechnen bereitstellt * [:Python/Requests:Requests] - Artikel zum Python-Modul, mit dem sich HTTP-Requests senden und empfangen lassen === spezielle Python Editoren / IDEs === * [:Mu:] - einsteigerfreundlicher Editor mit verschiedenen Modi, auch zur Programmierung von Microcontrollern mit MicroPython * [:Thonny:] - einsteigerfreundliche IDE speziell für Python == Extern == * [https://docs.python.org/2/faq/ Python FAQ] {en} - Häufig gestellte Fragen und Antworten * [https://wiki.python.org/moin/IntegratedDevelopmentEnvironments Entwicklungsumgebungen für Python (IDE)] {en} * [https://thonny.org/ einfache Entwicklungsumgebung] {en} mit praktischem "step-by-step" Debugging, Objektinspektor, für Schulen geeignet * [https://www.python-forum.de/ Python-Forum] {de} - sehr gute Anlaufstelle für alle Probleme rund um Python #tag: Programmierung, Python