In Python sind Namespace-Pakete ein praktischer Ansatz für die Verteilung verwandter Module. Sie ermöglichen es mehreren Python-Produkten, Module innerhalb desselben Namensraums zu definieren, sodass Endbenutzer sie nahtlos importieren können.
Beginnend mit Python 3.3 wurde das Konzept impliziter Namespace-Pakete eingeführt. Dadurch entfällt die Notwendigkeit expliziter __init__.py-Dateien in Namespace-Paketverzeichnissen. Das importierende System durchsucht sys.path automatisch nach Verzeichnissen ohne __init__.py-Dateien und initialisiert sie als Namespace-Pakete.
Für Python-Versionen vor 3.3 der pkgutil.extend_path ()-Methode kann verwendet werden, um explizite Namespace-Pakete zu definieren:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Diese Zeile fügt alle im Suchpfad gefundenen regulären Pakete dem Attribut path des Namespace-Pakets hinzu.
In Szenarien, in denen sowohl reguläre als auch Namespace-Pakete nebeneinander existieren, wurde die zuvor erwähnte Methode „extend_path()“ um Folgendes erweitert: implizite Namespace-Pakete. Dies ermöglicht die folgende Verzeichnisstruktur:
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
Mit __init__.py-Dateien, die extension_path() verwenden, funktionieren import package.foo, import package.bar und import package.baz alle wie erwartet.
Im Gegensatz zu pkgutil.extend_path() ist die Die Funktion pkg_resources.declare_namespace() wurde nicht aktualisiert, um implizite Namespace-Pakete zu unterstützen. Daher empfiehlt es sich, die pkgutil-Lösung einzusetzen.
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