Les packages d'espace de noms en Python permettent la distribution de bibliothèques associées sous forme de téléchargements individuels. Cet article explique comment définir des packages d'espace de noms pour permettre à plusieurs produits Python de partager un espace de noms commun.
Packages d'espace de noms implicites
À partir de Python 3.3, des packages d'espace de noms implicites sont disponibles . Ces packages sont des répertoires sans fichiers __init__.py, et ils sont recherchés lorsqu'aucun module n'est trouvé dans le chemin actuel. Les modules et les packages peuvent être importés sous des packages d'espace de noms implicites en utilisant la notation par points.
Mélange de packages réguliers et d'espaces de noms
Pour permettre l'interopérabilité entre les packages standards (avec les fichiers __init__.py) et les packages d'espace de noms, la méthode pkgutil.extend_path() a été étendue. Les packages réguliers qui déclarent des extensions d'espace de noms ajouteront à la fois les packages réguliers et les packages d'espace de noms à leur __path__.
Exemple de structure de répertoires
Considérez la structure de répertoires suivante :
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
Avec les déclarations pkgutil.extend_path() appropriées, les importations suivantes réussiront :
pkg_resources.declare_namespace()
La méthode pkg_resources.declare_namespace() n'a pas été mise à jour pour prendre en charge les packages d'espace de noms implicites.
Conclusion
La définition de packages d'espace de noms permet la modularité et la flexibilité dans le développement de packages Python. En tirant parti des packages d'espace de noms implicites et de la solution étendue pkgutil.extend_path(), les développeurs peuvent créer des packages d'espace de noms qui peuvent être partagés et utilisés par plusieurs produits.
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!