"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment créer des packages d'espace de noms en Python pour les modules partagés ?

Comment créer des packages d'espace de noms en Python pour les modules partagés ?

Publié le 2024-11-08
Parcourir:285

How to Create Namespace Packages in Python for Shared Modules?

Création de packages d'espace de noms en Python pour la distribution de modules partagés

Introduction

En Python, les packages d'espace de noms constituent une approche pratique pour distribuer des modules associés. Ils permettent à plusieurs produits Python de définir des modules dans le même espace de noms, permettant ainsi aux utilisateurs finaux de les importer de manière transparente.

Implémentation de packages d'espace de noms

Packages d'espace de noms implicites dans Python 3.3

À partir de Python 3.3, le concept de packages d'espaces de noms implicites a été introduit. Cela élimine le besoin de fichiers __init__.py explicites dans les répertoires de packages d'espace de noms. Le système d'importation recherche automatiquement dans sys.path les répertoires sans fichiers __init__.py et les initialise en tant que packages d'espace de noms.

Solution pré-Python 3.3

Pour les versions Python antérieures à 3.3, le pkgutil.extend_path () peut être utilisée pour définir des packages d'espace de noms explicites :

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

Cette ligne ajoute tous les packages standards trouvés dans le chemin de recherche à l'attribut path du package d'espace de noms.

Utilisation de Regular et de Namespace Packages Together

Dans les scénarios où les packages réguliers et d'espace de noms coexistent, la méthode extend_path() mentionnée précédemment a été étendue pour inclure les packages d'espace de noms implicites. Cela permet la structure de répertoires suivante :

├── path1
│   └── package
│       ├── __init__.py
│       └── foo.py
├── path2
│   └── package
│       └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

Avec les fichiers __init__.py utilisant extend_path(), import package.foo, import package.bar et import package.baz fonctionneront tous comme prévu.

pkg_resources .declare_namespace()

Contrairement à pkgutil.extend_path(), la fonction pkg_resources.declare_namespace() n'a pas été mise à jour pour prendre en charge les packages d'espace de noms implicites. Il est donc conseillé d'utiliser la solution pkgutil.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729575676. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3