Maison > Article > développement back-end > Comment créer des packages d'espace de noms en Python pour les modules partagés ?
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 :
<code class="python">from pkgutil import extend_path __path__ = extend_path(__path__, __name__)</code>
Cette ligne ajoute tous les packages réguliers trouvés dans le chemin de recherche à l'attribut path du package d'espace de noms.
Dans les scénarios où les packages d'espace de noms et réguliers 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. Par conséquent, il est conseillé d'utiliser la solution pkgutil.
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!