Maison  >  Article  >  développement back-end  >  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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-22 14:55:03575parcourir

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 :

<code class="python">from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)</code>

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

Utiliser ensemble des packages d'espace de noms et des packages réguliers

Dans les scénarios où les packages d'espace de noms et réguliers 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. Par conséquent, il est conseillé d'utiliser la solution pkgutil.

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