Ausführen von Python-Code

Im letzten Kapitel haben wir ein wenig mit einfachen Python-Kommandos in der Python-Shell herumgespielt. Programme werden aber normalerweise nicht interaktiv eingetippt sondern in Dateien gespeichert. Wir werden nun unser erstes "richtiges" Python-Programm schreiben. Wir starten mit dem "obligatorischen" Hallo-Welt-Skript. In der interaktiven Shell sieht es so aus:

 $ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hallo Welt!")
Hallo Welt!

Aber wie wir bereits gesagt haben, wollen wir nun ein "richtiges" Programm schreiben, also in einer Datei. Wir schreiben eine leichte Variation des Hallo-Welt-Themas. Wir wollen den Text "Python lernen" ausgeben. Dazu müssen wir die entsprechende print-Zeile in eine Datei schreiben. Um unsere Datei zu editieren und abzuspeichern, benötigen wir einen Editor. Sowohl unter Linux als auch unter Windows stehen eine Vielzahl von Editoren und Entwicklungsumgebungen zur Entwicklung von Python-Programmen zur Verfügung. Unter Linux kann man beispielsweise den vi, vim, emacs, geany, gedit und eine Vielzahl von weiteren Editoren benutzen. Der emacs steht beispielsweise auch unter Windows zur Verfügung. Als Entwicklungsumgebung eignet sich sowohl unter Linux als auch unter Windows das quelloffene Programm eclipse hervorragend.

Wenn Sie sich also für einen Editor entschieden haben, geben Sie dort bitte die folgende Zeile ein:

print("Python lernen!")

Dann speichern Sie bitte das Mini-Skript unter python_lernen.py. Die Dateiendung "py" ist unter Linux für die Funktionsweise nicht unbedingt wichtig, solange man das Python-Programm nicht als Modul verwenden will. Die Endung sollte man aber dennoch verwenden, denn dadurch lassen sich Python-Dateien direkt am Namen erkennen. Wie bereits geschrieben, ist die Endung jedoch zwingend notwendig, wenn man die Datei als Modul verwenden will.

Starten eines Python-Skriptes

Nehmen wir an, dass unser Skript in einem Unterverzeichnis "python" des Benutzers monty gespeichert ist, dann kann man es ganz leicht in einer Shell starten:

Starten des Python-Skriptes in der Bash mit

Im Folgenden finden Sie die gleiche Eingabesequenz wie im Bild:

monty@python:~$ cd python
monty@python:~/python$ python python_lernen.py 
Python lernen!
monty@python:~/python$

Starten unter Windows

Unter Windows kann man das Programm aus der Eingabeaufforderung heraus starten: (Start -> Alle Programme -> Zubehör -> Eingabeaufforderung):

Starten eines Python-Programmes von der Eingabeaufforderung.

Natürlich lässt sich ein Python-Skript oder Python-Programm unter Windows auch in gewohnter Manier durch Doppelklick auf das Icon starten:

Starten eines Python-Scripts unter Windows.

Nach dem Doppelklick wird man jedoch bei unserem Beispiel eine unangenehme Überraschung erleben. Ein Ausgabefenster erscheint zwar, aber nur so kurz, dass man keine Ausgaben lesen kann. Üblicherweise löst man dieses Problem mit einem Trick: Man fügt hinter die letzte Programmzeile eine Eingabeaufforderung ein. Das Kommando "input()" wartet auf eine Eingabe. Das bedeutet, dass man die vorigen Ausgaben solange lesen kann, bis man eine Eingabe eingegeben hat, - also z.B. auch die leere Eingabe - und diese dann durch drücken der Return-Taste bestätigt hat.

Python-Interna

Höchstwahrscheinlich haben Sie irgendwo gelesen, dass die Python-Sprache eine interpretierte Programmier- oder Skriptsprache ist. Die Wahrheit ist: Python ist sowohl eine interpretierte als auch eine kompilierte Sprache. Aber Python als kompilierte Sprache zu bezeichnen, wäre irreführend. (Am Ende dieses Kapitels finden Sie die Definitionen für Compiler und Interpreter, falls Sie mit den Konzepten noch nicht vertraut sind!) Es wird davon ausgegangen, dass der Compiler den Python-Code in die Maschinensprache übersetzt. Python-Code wird in Zwischencode übersetzt, der von einer virtuellen Maschine ausgeführt werden muss, die als PVM (Python Virtual Machine) bezeichnet wird. Dies ist ein ähnlicher Ansatz wie bei Java. Es gibt sogar eine Möglichkeit, Python-Programme in Java-Bytecode für die Java Virtual Machine (JVM) zu übersetzen. Dies kann mit Jython erreicht werden.

Die Frage ist, muss ich meine Python-Skripte kompilieren, um sie schneller zu machen, oder wie kann ich sie kompilieren? Die Antwort ist einfach: Normalerweise müssen Sie nichts tun und sollten sich nicht darum kümmern, da "Python" bereits das Denken für Sie erledigt, d. H. Die erforderlichen Schritte automatisch ausführt.

Aus welchem Grund möchten Sie ein Python-Programm manuell kompilieren? Kein Problem. Dies kann mit dem Modul py_compile entweder über die Interpreter-Shell erfolgen:

import py_compile
py_compile.compile ('my_first_simple_program.py')

Ausgabe::

'__pycache __ / my_first_simple_program.cpython-37.pyc'
oder verwenden Sie den folgenden Befehl an der Shell-Eingabeaufforderung
python -m py_compile my_first_simple_program.py
In beiden Fällen können Sie zwei Dinge bemerken: Erstens gibt es ein neues Unterverzeichnis "pycache", falls es noch nicht vorhanden ist. In diesem Unterverzeichnis finden Sie eine Datei "my_first_simple_script.cpython-34.pyc". Dies ist die kompilierte Version unserer Datei im Bytecode. Sie können auch alle Python-Dateien automatisch mit dem Compileall-Modul kompilieren. Sie können dies über die Shell-Eingabeaufforderung tun, indem Sie compileall.py ausführen und den Pfad des Verzeichnisses angeben, das die zu kompilierenden Python-Dateien enthält:
monty @ python: ~ / python $ python -m compileall.
Auflistung. ...

Aber wie gesagt, Sie müssen und sollten sich nicht um das Kompilieren von Python-Code kümmern. Die Zusammenstellung ist aus gutem Grund dem Benutzer verborgen. Einige Neulinge fragen sich manchmal, woher diese ominösen Dateien mit dem Suffix .pyc stammen könnten. Wenn Python Schreibzugriff für das Verzeichnis hat, in dem sich das Python-Programm befindet, speichert es den kompilierten Bytecode in einer Datei, die mit dem Suffix .pyc endet. Wenn Python keinen Schreibzugriff hat, funktioniert das Programm trotzdem. Der Bytecode wird erzeugt, aber beim Beenden des Programms verworfen. Bei jedem Aufruf eines Python-Programms prüft Python, ob eine kompilierte Version mit dem Suffix .pyc vorhanden ist. Diese Datei muss neuer sein als die Datei mit dem Suffix .py. Wenn eine solche Datei vorhanden ist, lädt Python den Bytecode, wodurch die Startzeit des Skripts beschleunigt wird. Wenn keine Bytecode-Version vorhanden ist, erstellt Python den Bytecode, bevor die Ausführung des Programms gestartet wird. Die Ausführung eines Python-Programms bedeutet die Ausführung des Bytecodes auf dem Python.

Übersetzung des Python-Skripts in Byte-Code

Virtuelle Maschine (PVM).

Kompilierung eines Python-Skripts

Jedes Mal, wenn ein Python-Skript ausgeführt wird, wird ein Bytecode erstellt. Wenn ein Python-Skript als Modul importiert wird, wird der Bytecode in der entsprechenden .pyc-Datei gespeichert. Im Folgenden wird also keine Bytecodedatei erstellt:

` monty @ python: ~ / python $ python my_first_simple_program.py Mein erstes einfaches Python-Skript! monty @ python: ~ / python $ ` Beim Import in die folgende Python2-Sitzung wird eine Bytecodedatei mit dem Namen "Mein_erstes_einfaches_Python_Programm.pyc" erstellt:

monty@python:~/tmp$ ls 
my_first_simple_program.py
monty@python:~/tmp$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import my_first_simple_script
My first simple Python script!
>>> exit()
monty@python:~/tmp$ ls
my_first_simple_program.py  Mein_erstes_einfaches_Python_Programm.pyc
monty@python:~/tmp$

Ausführbare Skripte unter Linux

Dieses Kapitel kann von Windows-Benutzern übersprungen werden. Mach dir keine Sorgen! Es ist nicht wesentlich!

Bisher haben wir unsere Python-Skripte mit gestartet ` python3 meine_Datei.py `

auf der Bash-Befehlszeile. Ein Python-Skript kann auch wie jedes andere Skript unter Linux gestartet werden, z. Bash-Skripte. Zu diesem Zweck sind zwei Schritte erforderlich: Die Shebang-Zeile #! / usr / bin / env python3 muss als erste Zeile Ihrer Python-Codedatei hinzugefügt werden. Alternativ kann diese Zeile #! / Usr / bin / python3 sein, wenn dies der Speicherort Ihres Python-Interpreters ist. Anstatt env wie in der ersten Shebang-Zeile zu verwenden, wird der Interpreter zum Zeitpunkt der Ausführung des Skripts gesucht und gefunden. Dies macht das Skript portabler. Es hat jedoch auch das gleiche Problem: Der Pfad zu env kann auch pro Maschine unterschiedlich sein. Die Datei muss ausführbar gemacht werden: Der Befehl "chmod + x scriptname" muss auf einer Linux-Shell ausgeführt werden, z. Bash. "chmod 755 scriptname" kann auch verwendet werden, um Ihre Datei ausführbar zu machen. In unserem Beispiel:

` $ chmod + x Mein_erstes_einfaches_Python_Skript.py `

Wir veranschaulichen dies in einer Bash-Sitzung:

bernd@marvin:~$ more Mein_erstes_einfaches_Python_Skript.py 
#!/usr/bin/env python3
print("Mein erstes einfaches Python-Skript!")
bernd@marvin:~$ ls -ltr my_first_simple_script.py 
-rw-r--r-- 1 bernd bernd 63 Nov  4 21:17 my_first_simple_script.py
bernd@marvin:~$ chmod +x Mein_erstes_einfaches_Python_Skript.py 
bernd@marvin:~$ ls -ltr my_first_simple_script.py 
-rwxr-xr-x 1 bernd bernd 63 Nov  4 21:17 my_first_simple_script.py
bernd@marvin:~$ ./Mein_erstes_einfaches_Python_Skript.py 
Mein erstes einfaches Python-Skript!

Compiler und Interpreter

Ein Compiler (auch Übersetzer genannt) ist ein Computerprogramm, das ein in einer Quellsprache, wie beispielsweise C oder C++, geschriebenes Programm - Quelle oder Quellprogramm genannt - in ein semantisch äquivalentes Programm (Zielprogramm) einer Zielsprache übersetzt. Üblicherweise handelt es sich dabei um die Übersetzung eines von einem Programmierer in einer Programmiersprache geschriebenen Quelltextes in Assemblersprache, Bytecode oder Maschinensprache. Das Übersetzen eines Quellprogramms in ein Zielprogramm durch einen Compiler wird auch als Kompilierung bezeichnet.

Ein Interpreter ist ein Programm, das einen Quellcode im Gegensatz zu Assemblern oder Compilern nicht direkt in ausführbaren Code, also eine ausführbare Datei, wandelt, sondern den Quellcode einliest, analysiert und ausführt. Die Analyse des Quellcodes erfolgt zur Laufzeit des Programms.

Hilfe

Zu jedem Kommando und jeder Funktion kann man im Python-Interpreter auch interaktiv Hilfe anfordern.

In [ ]:
help("print")

Ruft man help() ohne Parameter auf, gelangt man in den Help-Modus. Nun kann man sich mit "modules", "keywords", "symbols" oder "topics" ausführliche Informationen zu den verfügbaren Modulen, Schlüsselwörtern, Symbolen und Themen geben lassen.

In [ ]:
help()
Welcome to Python 3.7's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.7/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics".  Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
help> keywords
Here is a list of the Python keywords.  Enter any keyword to get more help.
False               class               from                or
None                continue            global              pass
True                def                 if                  raise
and                 del                 import              return
as                  elif                in                  try
assert              else                is                  while
async               except              lambda              with
await               finally             nonlocal            yield
break               for                 not