"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment définir des packages d'espace de noms pour le partage de modules entre projets en Python ?

Comment définir des packages d'espace de noms pour le partage de modules entre projets en Python ?

Publié le 2024-11-08
Parcourir:969

How to Define Namespace Packages for Cross-Project Module Sharing in Python?

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.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729575800. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

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