„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erstelle ich Namespace-Pakete in Python für gemeinsam genutzte Module?

Wie erstelle ich Namespace-Pakete in Python für gemeinsam genutzte Module?

Veröffentlicht am 08.11.2024
Durchsuche:145

How to Create Namespace Packages in Python for Shared Modules?

Erstellen von Namespace-Paketen in Python für die gemeinsame Modulverteilung

Einführung

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.

Implementieren von Namespace-Paketen

Implizite Namespace-Pakete in Python 3.3

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.

Lösung vor Python 3.3

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.

Verwendung von Regular und Namespace Pakete zusammen

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.

pkg_resources .declare_namespace()

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729575676 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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