Heim >Backend-Entwicklung >Python-Tutorial >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?

DDD
DDDOriginal
2024-10-22 14:34:03947Durchsuche

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, 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn