Module - Vertiefung

Modulsuchpfad

Wenn ein Modul namens spam importiert wird, sucht der Interpreter zunächst ein built-in Modul mit diesem Namen. Wenn es nicht gefunden wird, wird anschliessend nach einer Datei namens spam.py in einer Liste von Verzeichnissen gesucht, die in der Variablen sys.path angegeben werden. sys.path wird mit den folgenden Verzeichnissen initialisiert:

1. das Verzeichnis, in dem das aufgerufene Skript liegt (oder das aktuelle Verzeichnis, wenn keine Datei angegeben ist)
2. der Shell-Umgebungsvariablen PYTHONPATH (mit einer Liste von Verzeichnisnamen in derselben Syntax wie die Shell-Variable PATH)
3. der installationsabhängigen Voreinstellung

Nach der Initialisierung können Python-Programme sys.path ändern. Das Verzeichnis, in dem das aktuell laufende Skript liegt, wird am Anfang des Suchpfades vor dem Standardbibliothekspfad platziert. Dies bedeutet, dass Skripte in diesem Verzeichnis vorrangig anstelle von Modulen mit demselben Namen aus dem Bibliotheksverzeichnis geladen werden. Wenn dies nicht beabsichtigt ist, kann dies zu entsprechenden Fehlern führen.

Standardmodule

Python kommt mit einer umfangreichen Bibliothek von Standardmodulen, die in einem separaten Dokument sind bzw. in zwei eigenen Kapiteln durchgenommen werden, der Python Standard Bibliothek (Python Library Reference). Einige Module sind bereits in den Interpreter eingebaut; Diese ermöglichen Operationen, die nicht Teil des Kernels der Sprache sind, aber dennoch entweder aus Effizienzgründen oder z.B. als Basis für Betriebssystemaufrufe eingebaut sind. Die Menge dieser Module ist eine Konfigurationsoption, die in der Regel von der zugrunde liegenden Plattform abhängt. Zum Beispiel ist das Modul winreg nur auf Windows-Systemen verfügbar.

Standardmodul sys

Ein bestimmtes Modul verdient etwas Aufmerksamkeit: sys, das in jeden Python-Interpreter eingebaut ist. Die Variablen sys.ps1 und sys.ps2 definieren die als primäre und sekundäre Eingabeaufforderungen verwendeten Strings:

>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>> sys.ps1 = 'C> '
C> print('Test!')
Test!
C> 

Diese beiden Variablen sind jedoch nur dann definiert, wenn sich der Interpreter im interaktiven Modus befindet.

Wie oben bereits angesprochen, ist die Variable sys.path eine Liste von Strings, die den Suchpfad des Interpreters für Module bestimmt. Diese Variable wird auf mit einen Standardpfad initialisiert, der aus der Umgebungsvariablen PYTHONPATH oder aus einer eingebauten Vorgabe genommen wird, wenn PYTHONPATH nicht gesetzt ist. Diese Variable kann mit Standardlistenoperationen geändert werden.

In [2]:
import sys
print(sys.path)
['', '/home/root/anaconda3/lib/python36.zip', '/home/root/anaconda3/lib/python3.6', '/home/root/anaconda3/lib/python3.6/lib-dynload', '/home/root/anaconda3/lib/python3.6/site-packages', '/home/root/anaconda3/lib/python3.6/site-packages/Mako-1.0.7-py3.6.egg', '/home/root/anaconda3/lib/python3.6/site-packages/IPython/extensions', '/home/nik/.ipython', '/home/nik/Exchange/nb2edx/code', '/', 'h', 'o', 'm', 'e', '/', 'n', 'i', 'k', '/', 'E', 'x', 'c', 'h', 'a', 'n', 'g', 'e', '/', 'n', 'b', '2', 'e', 'd', 'x', '/', 'c', 'o', 'd', 'e']
In [3]:
%%Mooc MoocStringAssessment
Out[3]:

Modulsuchpfad

Geben sie den Code an, der den Modulsuchpfad so verändert, dass der Ordner '/ufs/guido/lib/python' mit durchsucht wird:



dir() Funktion

Die built-in Funktion dir() kann u.a. dazu benutzt werden, herauszufinden, welche Namen ein Modul definiert hat. Die Funktion dir() gibt eine sortierte Liste von Strings zurück:

In [4]:
import fibo
print(dir(fibo))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']
In [5]:
%%Mooc MoocStringAssessment
Out[5]:

Dir-Funktion

Geben sie den Code an, der alle Namen des Moduls math angibt:



Ohne Argumente gibt dir() die Liste der Namen zurück, die aktuell definiert sind und verwendet werden können:

>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'fib', 'fibo']

Man beachte, dass alle möglichen Arten von Namen aufgelistet werden: Variable, Module, Funktionen, etc. Dabei sind alle Namen, die von jeweils zwei Unterstrichen eingerahmt sind (wie z.B. __name__), Systemvariable, die von der jeweiligen Python-Version standardmäßig vordefiniert sind.

dir() listet dagegen nicht die Namen der built-in Funktionen und Variablen. Eine Liste dieser Funktionen und Variablen bekommt man, indem man das Modul builtins aus der Standardbibliothek importiert und mittels dir() ausgibt::

In [6]:
import builtins
print(dir(builtins))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
In [7]:
%%Mooc Video
Out[7]:

Weitere Literatur

In [8]:
%%Mooc WebReference

The Module Search Path

https://docs.python.org/3/tutorial/modules.html#the-module-search-path

Hinweis: Der Modulsuchpfad

In [9]:
%%Mooc WebReference
In [10]:
%%Mooc WebReference

The dir() Function

https://docs.python.org/3/tutorial/modules.html#the-dir-function

Hinweis: Die dir() Funktion