Maison >développement back-end >Tutoriel Python >Ai-je besoin de fichiers `__init__.py` pour les packages dans Python 3.3 ?

Ai-je besoin de fichiers `__init__.py` pour les packages dans Python 3.3 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 08:30:11337parcourir

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

Packages d'espace de noms en Python 3.3

Question :

En Python 3.3, est-il toujours nécessaire d'avoir un __init__. fichier py lors de l'importation forfaits ?

Réponse :

Pas nécessairement. Python 3.3 a introduit le concept de « packages d'espace de noms implicites », permettant de créer des packages sans fichier __init__.py. Ceux-ci sont connus sous le nom de packages d'espace de noms, contrairement aux packages classiques qui ont un fichier __init__.py.

Cas d'utilisation du package d'espace de noms implicite :

Les packages d'espace de noms sont spécifiquement utilisés lorsque plusieurs bibliothèques résident à des emplacements différents et doivent contribuer à un sous-package au même package parent. Par exemple, considérons la structure suivante :

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

Sans packages d'espace de noms, l'importation de "google_pubsub" et de "google_storage" échouerait car Python traite les packages standards comme des entités autonomes. En supprimant les fichiers __init__.py des répertoires « google » et « google/cloud », ils sont interprétés comme des packages d'espace de noms, permettant à l'interpréteur Python de rechercher et de contribuer aux modules et sous-packages au package « google ».

Packages réguliers ou packages d'espace de noms :

Dans la plupart des cas, il est recommandé de s'en tenir aux packages réguliers en utilisant des packages vides. Fichiers __init__.py. En effet :

  • Les packages standards sont plus prévisibles et plus faciles à maintenir.
  • De nombreux outils et bibliothèques Python s'attendent à ce que les packages standards fonctionnent correctement.

Conclusion :

Bien que les packages d'espaces de noms puissent être utiles dans des scénarios spécifiques, ils doivent être utilisés avec parcimonie. Pour la plupart des développeurs et des cas d’utilisation, les packages standards avec les fichiers __init__.py constituent l’approche recommandée. Envisagez les packages d'espaces de noms uniquement lorsqu'il existe un réel besoin de partager des espaces de noms entre plusieurs répertoires contenant des sous-packages.

Références :

  • [PEP 420 - Espace de noms implicite Packages](https://www.python.org/dev/peps/pep-0420/)
  • [Python Docs - Packages réguliers](https://docs.python.org/3/reference/ import.html#packages)
  • [Python Docs - Espace de noms Packages](https://docs.python.org/3/reference/import.html#namespace-packages)
  • [Pièges pour les imprudents dans le système d'importation de Python](https://www.python. org/doc/essays/import-traps/)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn