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.
À 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.
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 :
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Cette ligne ajoute tous les packages standards trouvés dans le chemin de recherche à l'attribut path du package d'espace de noms.
Dans les scénarios où les packages réguliers et d'espace de noms 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
Avec les fichiers __init__.py utilisant extend_path(), import package.foo, import package.bar et import package.baz fonctionneront tous comme prévu.
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. Il est donc conseillé d'utiliser la solution pkgutil.
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