Maison  >  Article  >  développement back-end  >  Comment définir des packages d'espace de noms pour le partage de modules entre projets en Python ?

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

DDD
DDDoriginal
2024-10-22 14:34:03827parcourir

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

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!

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