Heim >Backend-Entwicklung >Python-Tutorial >Benötige ich „__init__.py'-Dateien für Pakete in Python 3.3?

Benötige ich „__init__.py'-Dateien für Pakete in Python 3.3?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 08:30:11337Durchsuche

Do I Need `__init__.py` Files for Packages in Python 3.3 ?

Namespace-Pakete in Python 3.3

Frage:

Ist in Python 3.3 noch ein __init__ erforderlich? py-Datei beim Importieren Pakete?

Antwort:

Nicht unbedingt. Mit Python 3.3 wurde das Konzept der „impliziten Namespace-Pakete“ eingeführt, das die Erstellung von Paketen ohne eine __init__.py-Datei ermöglicht. Diese werden als Namespace-Pakete bezeichnet, im Gegensatz zu regulären Paketen, die über eine __init__.py-Datei verfügen.

Impliziter Namespace-Paket-Anwendungsfall:

Namespace-Pakete werden speziell verwendet wenn sich mehrere Bibliotheken an verschiedenen Standorten befinden und ein Unterpaket zum selben übergeordneten Paket beitragen müssen. Betrachten Sie beispielsweise die folgende Struktur:

google_pubsub/             # Package 1
    google/                 # Namespace package
        cloud/              # Namespace package
            pubsub/         # Regular package
                __init__.py
                foo.py

google_storage/             # Package 2
    google/                 # Namespace package
        cloud/              # Namespace package
            storage/        # Regular package
                __init__.py
                bar.py

Ohne Namespace-Pakete würde der Import von „google_pubsub“ und „google_storage“ fehlschlagen, da Python reguläre Pakete als eigenständige Entitäten behandelt. Durch das Entfernen der __init__.py-Dateien aus den Verzeichnissen „google“ und „google/cloud“ werden sie als Namespace-Pakete interpretiert, sodass der Python-Interpreter Module und Unterpakete finden und zum „google“-Paket beitragen kann.

Reguläre vs. Namespace-Pakete:

In den meisten Fällen wird empfohlen, bei regulären Paketen zu bleiben und leere Pakete zu verwenden __init__.py-Dateien. Dies liegt daran, dass:

  • Reguläre Pakete vorhersehbarer und einfacher zu warten sind.
  • Viele Python-Tools und -Bibliotheken erwarten, dass reguläre Pakete ordnungsgemäß funktionieren.

Fazit:

Während Namespace-Pakete in bestimmten Szenarien nützlich sein können, sollten sie sparsam verwendet werden. Für die meisten Entwickler und Anwendungsfälle sind reguläre Pakete mit __init__.py-Dateien der empfohlene Ansatz. Berücksichtigen Sie Namespace-Pakete nur, wenn ein echter Bedarf besteht, Namespaces zwischen mehreren Verzeichnissen mit Unterpaketen gemeinsam zu nutzen.

Referenzen:

  • [PEP 420 – Impliziter Namespace Pakete](https://www.python.org/dev/peps/pep-0420/)
  • [Python Docs – Reguläre Pakete](https://docs.python.org/3/reference/ import.html#packages)
  • [Python Docs – Namespace Pakete](https://docs.python.org/3/reference/import.html#namespace-packages)
  • [Fallen für Unvorsichtige im Importsystem von Python](https://www.python. org/doc/essays/import-traps/)

Das obige ist der detaillierte Inhalt vonBenötige ich „__init__.py'-Dateien für Pakete in Python 3.3?. 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