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.
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