Je größer ein Programm wird, desto unübersichtlicher wird eine einzige Datei. Mit Modulen teilst du Code auf mehrere Dateien auf und nutzt Code, den andere geschrieben haben. Ein Modul ist einfach eine Python-Datei; mit import machst du ihren Inhalt verfügbar.
Module der Standardbibliothek
Python bringt Hunderte Module mit ("Batterien inklusive"):
import math
print(math.sqrt(81))
print(math.pi)9.0 3.141592653589793
Es gibt mehrere Schreibweisen für den Import:
import math # math.sqrt(...)
from math import sqrt, pi # direkt sqrt(...) und pi
from math import floor as runde # mit anderem Namen
import random as zufall # Modul unter anderem Namen
print(sqrt(16), pi)
print(runde(2.9))
print(zufall.randint(5, 5))4.0 3.141592653589793 2 5
Eigene Module schreiben
Lege eine Datei rechnen.py an:
PI = 3.14159
def kreisflaeche(r):
return PI * r * r
def verdopple(x):
return x * 2In einer zweiten Datei im selben Ordner importierst du sie:
import rechnen
print(rechnen.verdopple(21))
print(round(rechnen.kreisflaeche(2), 2))Der Dateiname ohne .py ist der Modulname. Python sucht Module im Ordner des Skripts, in den installierten Paketen und in der Standardbibliothek.
if __name__ == "__main__"
Jedes Modul kennt seinen eigenen Namen in __name__. Läuft die Datei direkt, ist er "__main__", wird sie importiert, ist es der Modulname. So trennst du Bibliothekscode von Startcode:
def verdopple(x):
return x * 2
if __name__ == "__main__":
# läuft nur bei "python rechnen.py", nicht beim Import
print("Selbsttest:", verdopple(4))Dieses Muster steht am Ende fast jedes Python-Skripts.
Was ein Modul enthält
Mit dir() listest du auf, was ein Modul anbietet, mit help() bekommst du die Dokumentation:
import math
print([n for n in dir(math) if n.startswith("s")][:5])
print(math.sqrt.__doc__.splitlines()[0])['sin', 'sinh', 'sqrt'] Return the square root of x.
Der Suchpfad
Wo Python sucht, steht in sys.path. Ein nicht gefundenes Modul meldet einen ModuleNotFoundError:
import gibt_es_nichtTraceback (most recent call last):
File "beispiel.py", line 1, in <module>
import gibt_es_nicht
ModuleNotFoundError: No module named 'gibt_es_nicht'Zusätzliche Bibliotheken installierst du mit pip (nächstes Kapitel).
Pakete: Ordner mit Modulen
Ein Paket ist ein Ordner mit Modulen, meist mit einer Datei __init__.py:
meinprojekt/
├── haupt.py
└── werkzeuge/
├── __init__.py
├── text.py
└── zahlen.pyfrom werkzeuge import text
from werkzeuge.zahlen import rundeMerke
- Ein Modul ist eine
.py-Datei;import modulmacht sie verfügbar from modul import nameundimport modul as kurznamesind Variantenif __name__ == "__main__":trennt Startcode von importierbarem Code- Ein Paket ist ein Ordner mit Modulen (und
__init__.py) - Nicht gefundene Module melden
ModuleNotFoundError
Aufgabe
Lege ein Modul werkzeuge.py mit einer Funktion ist_gerade(n) an und importiere es in einem zweiten Skript.