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, das Platzieren 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 ihre 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 die standardmäßige sys.path.
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 aufgrund 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 erforderlichen extension_path-Deklarationen in den __init__.py-Dateien sind Importe wie namespace.foo, namespace.bar und namespace.baz alle erfolgreich.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3