Comment définir des packages d'espace de noms pour le partage de modules entre projets en Python ?

DDD
Libérer: 2024-10-22 14:34:03
original
826 Les gens l'ont consulté

How to Define Namespace Packages for Cross-Project Module Sharing in Python?

Définition de packages d'espace de noms pour le partage de modules entre projets

En Python, les packages d'espace de noms fournissent un moyen de structurer le code associé sur plusieurs projets. Pour définir un package d'espace de noms, il est essentiel d'éviter de placer des fichiers __init__.py dans les répertoires des packages d'espace de noms.

Évolution des packages d'espace de noms

Avant Python 3.3, les packages d'espace de noms étaient requis déclaration explicite en utilisant pkgutil.extend_path() ou pkg_resources.declare_namespace(). Cependant, à partir de Python 3.3, des packages d'espace de noms implicites ont été introduits, permettant leur création transparente sans aucune déclaration.

Interaction avec les packages réguliers

Les packages d'espace de noms peuvent coexister avec les packages réguliers , permettant une structure hiérarchique. Lors de l'importation d'un module dans un package d'espace de noms, Python recherche dans le chemin du package parent, étendant la recherche au-delà du sys.path standard.

pkgutil.extend_path() vs . pkg_resources.declare_namespace()

Alors que pkgutil.extend_path() et pkg_resources.declare_namespace() étaient auparavant utilisés pour définir des packages d'espace de noms, le premier est recommandé pour sa compatibilité future avec les packages d'espace de noms implicites. .

Exemple de structure

Considérez la structure de répertoires suivante :

Package-1/namespace/
Package-2/namespace/
├── path1
│  └── package
│     ├── __init__.py
│     └── foo.py
├── path2
│  └── package
│     └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py
Copier après la connexion

Avec les déclarations extend_path nécessaires dans les fichiers __init__.py, les importations telles car namespace.foo, namespace.bar et namespace.baz réussiront tous.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!