Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-10-22 14:55:03
original
663 Les gens l'ont consulté

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>
Copier après la connexion

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
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal