Module & Pakete

Sobald ein import im eigenen Quellcode auftaucht, arbeitet man mit eigenen Modulen bzw. Pakten oder denen anderer Autoren.

Jede Datei mit der Endung *.py ist gleichzeitig ein Modul, das in anderen Python-Dateien importiert und verwendet werden kann. Es kann Variablen, Funktionen oder Klassen enthalten.

import calendar
for line in calendar.monthcalendar(2019, 7):
    print(line)
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10, 11, 12, 13, 14]
[15, 16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30, 31, 0, 0, 0, 0]

Oder Teile eines Modules importieren:

from calendar import monthcalendar
for line in monthcalendar(2019, 7):
    print(line)
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10, 11, 12, 13, 14]
[15, 16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30, 31, 0, 0, 0, 0]

Letzteres funktioniert nur mit Paketen

import calendar
print(type(calendar))
from datetime import datetime
print(type(datetime))
<class 'module'>
<class 'type'>

Deshalb funktioniert Folgendes nicht:

from datetime.datetime import now

also ist ein Aufruf mit Klasse.Methode() notwenig

print(datetime.now())
2019-07-17 14:04:54.435268

oder einer Variablenzuordnung

import datetime
jetzt = datetime.datetime.now()
print(jetzt)
2019-07-17 14:04:54.444139

Es kann auch mit dem Import ein neuer Name festgelegt werden, um z.B. eine verkürzte Schreibweise nutzen zu können:

import calendar as cal
for line in cal.monthcalendar(2019, 7):
    print(line)
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10, 11, 12, 13, 14]
[15, 16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30, 31, 0, 0, 0, 0]

Module auf zweierlei Art nutzen

Mit einem speziellen Block kann ein Modul den Programmcode automatisch ausführen oder mit einem Import in anderen Modulen zur Verfügung gestellt und genutzt werden. Die Fallunterscheidung erfolgt mit der Anweisung import bzw. mit der Ausführung als Skript.

was vor der folgenden Zeile steht, steht nach einem Import in anderen Modulen zur Verfügung.

if __name__ == "__main__":

Was nach der obigen Zeile steht, kann als Skript automatisch ausgeführt werden. Gern werden dort auch Testanweisungen untergebracht, die nach einem Import ignoriert werden.

Im ersten Fall verwenden wir import, wie weiter oben schon gezeigt. Im zweiten Fall starten wir die Skriptausführung mit Python direkt:

python meinscript.py

Package

Ein Paket kann eine oder mehrere Dateien unter einem Paketnamen zusammenfassen. Das ganze Paket oder Teile davon können dann in anderen Programmteilen verwendet (importiert) werden.

Die meisten Pakete bestehen aus einem einfachen Namen. Es gibt aber auch komplexere Strukturen, die Namespace-Pakete repräsentieren. Der Aufruf erfolgt dann immer mit der Kombination /Paketname-Punkt-Modulname/ was auch Namenskonflikte vermeiden hilft.

Die Erstellung eines Namespace-Paketes wird an anderer Stelle beschrieben.

Mehr zum Thema Pakete findet sich in der Python-Dokumentation unter:

https://docs.python.org/3/tutorial/modules.html