„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 definiere ich Namespace-Pakete für die projektübergreifende Modulfreigabe in Python?

Wie definiere ich Namespace-Pakete für die projektübergreifende Modulfreigabe in Python?

Veröffentlicht am 08.11.2024
Durchsuche:787

How to Define Namespace Packages for Cross-Project Module Sharing 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, 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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729575800 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