Heim >Backend-Entwicklung >Python-Tutorial >Ist „__init__.py' für Python-Pakete in Version 3.3 weiterhin erforderlich?
Ist sie in Python 3.3 nicht mehr erforderlich? ? Datei __init__.py für Paket bereitstellen?
Einführung: Die Rolle der Datei __init__.py
In Python besteht die Rolle der Datei __init__.py darin, a zu identifizieren Verzeichnis als Paket Ermöglicht die Organisation der verschiedenen Verzeichnisse und Module dieses Verzeichnisses in einem Namensraum. In Python 2.7 und früher ist die Datei __init__.py zum Erstellen eines Pakets erforderlich.
__init__.py-Datei in Python 3.3
In Python 3.3 wurde das Konzept impliziter Namespace-Pakete eingeführt, was es auch ohne __init__.py-Dateien und -Pakete möglich macht können ebenfalls erstellt werden. Dies bedeutet, dass ein Verzeichnis nun als Namespace-Paket bezeichnet und der Inhalt dieses Verzeichnisses modularisiert werden kann.
Anwendungsfälle für Namespace-Pakete
Der häufigste Anwendungsfall für diese implizite Namespace-Paketfunktion besteht darin, mehreren Bibliotheken von verschiedenen Standorten aus zu ermöglichen, Unterpakete zu einem übergeordneten Paket beizutragen Paket . Angenommen, es gibt zwei Bibliotheken, google_pubsub und google_storage, die die folgende Struktur bereitstellen:
google_pubsub/ # 包 1 google/ # 命名空间包(没有 __init__.py) cloud/ # 命名空间包(没有 __init__.py) pubsub/ # 常规包(有 __init__.py) __init__.py # 必需的,用于创建常规包 foo.py google_storage/ # 包 2 google/ # 命名空间包(没有 __init__.py) cloud/ # 命名空间包(没有 __init__.py) storage/ # 常规包(有 __init__.py) __init__.py # 必需的,用于创建常规包 bar.py
In diesem Fall müssen die Verzeichnisse google/ und google/cloud/ Namespace-Pakete sein, sodass google_pubsub und The Das Paket „google_storage“ wird als Unterpaket desselben übergeordneten Pakets betrachtet.
Fazit:
Es gibt die folgenden zwei Arten von Python-Paketen:
Das obige ist der detaillierte Inhalt vonIst „__init__.py' für Python-Pakete in Version 3.3 weiterhin erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!