"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo definir paquetes de espacios de nombres para compartir módulos entre proyectos en Python?

¿Cómo definir paquetes de espacios de nombres para compartir módulos entre proyectos en Python?

Publicado el 2024-11-08
Navegar:749

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

Definición de paquetes de espacios de nombres para compartir módulos entre proyectos

En Python, los paquetes de espacios de nombres proporcionan un medio para estructurar código relacionado en múltiples proyectos. Para definir un paquete de espacio de nombres, es esencial evitar colocar archivos __init__.py dentro de los directorios del paquete de espacios de nombres.

Evolución de los paquetes de espacios de nombres

Antes de Python 3.3, se requerían paquetes de espacios de nombres declaración explícita utilizando pkgutil.extend_path() o pkg_resources.declare_namespace(). Sin embargo, a partir de Python 3.3, se introdujeron paquetes de espacios de nombres implícitos, lo que permitió su creación perfecta sin ninguna declaración.

Interacción con paquetes regulares

Los paquetes de espacios de nombres pueden coexistir con paquetes regulares , permitiendo una estructura jerárquica. Al importar un módulo dentro de un paquete de espacio de nombres, Python busca dentro de la ruta del paquete principal, extendiendo la búsqueda más allá de la sys.path estándar.

pkgutil.extend_path() vs pkg_resources.declare_namespace()

Si bien pkgutil.extend_path() y pkg_resources.declare_namespace() se usaban anteriormente para definir paquetes de espacios de nombres, se recomienda el primero por su compatibilidad futura con paquetes de espacios de nombres implícitos. .

Estructura de ejemplo

Considere la siguiente estructura de directorio:

Package-1/namespace/
Package-2/namespace/
├── path1
│  └── package
│     ├── __init__.py
│     └── foo.py
├── path2
│  └── package
│     └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

Con las declaraciones extend_path necesarias en los archivos __init__.py, las importaciones como namespace.foo, namespace.bar y namespace.baz se realizarán correctamente.

Declaración de liberación Este artículo se reimprime en: 1729575800 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3