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!