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 du package 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 standards
Les packages d'espace de noms peuvent coexister avec les packages standards , permettant une structure hiérarchique. Lors de l'importation d'un module dans un package d'espace de noms, Python recherche dans le path 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é à l'épreuve du temps 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 que namespace.foo, namespace.bar et namespace.baz réussiront toutes.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3