Heim >Backend-Entwicklung >Python-Tutorial >Wie definiere ich Namespace-Pakete für die projektübergreifende Modulfreigabe in Python?
Definieren von Namespace-Paketen für die projektübergreifende Modulfreigabe
In Python bieten Namespace-Pakete eine Möglichkeit, zusammengehörigen Code über mehrere Projekte hinweg zu strukturieren. Um ein Namespace-Paket zu definieren, ist es wichtig, die Platzierung von __init__.py-Dateien in den Namespace-Paketverzeichnissen zu vermeiden.
Entwicklung von Namespace-Paketen
Vor Python 3.3 waren Namespace-Pakete erforderlich explizite Deklaration mit pkgutil.extend_path() oder pkg_resources.declare_namespace(). Ab Python 3.3 wurden jedoch implizite Namespace-Pakete eingeführt, die deren nahtlose Erstellung ohne jegliche Deklaration ermöglichten.
Interaktion mit regulären Paketen
Namespace-Pakete können mit regulären Paketen koexistieren , was eine hierarchische Struktur ermöglicht. Beim Importieren eines Moduls innerhalb eines Namespace-Pakets sucht Python innerhalb des Pfads des übergeordneten Pakets und erweitert die Suche über den standardmäßigen sys.path hinaus.
pkgutil.extend_path() vs . pkg_resources.declare_namespace()
Während bisher sowohl pkgutil.extend_path() als auch pkg_resources.declare_namespace() zum Definieren von Namespace-Paketen verwendet wurden, wird ersteres wegen seiner zukunftssicheren Kompatibilität mit impliziten Namespace-Paketen empfohlen .
Beispielstruktur
Betrachten Sie die folgende Verzeichnisstruktur:
Package-1/namespace/ Package-2/namespace/ ├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
Mit den notwendigen extension_path-Deklarationen in den __init__.py-Dateien werden Importe wie z als namespace.foo, namespace.bar und namespace.baz werden alle erfolgreich sein.
Das obige ist der detaillierte Inhalt vonWie definiere ich Namespace-Pakete für die projektübergreifende Modulfreigabe in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!