En Python, los paquetes de espacios de nombres son un enfoque conveniente para distribuir módulos relacionados. Permiten que varios productos Python definan módulos dentro del mismo espacio de nombres, lo que permite a los usuarios finales importarlos sin problemas.
A partir de Python 3.3, se introdujo el concepto de paquetes de espacios de nombres implícitos. Esto elimina la necesidad de archivos __init__.py explícitos dentro de los directorios de paquetes de espacios de nombres. El sistema de importación busca automáticamente en sys.path directorios sin archivos __init__.py y los inicializa como paquetes de espacios de nombres.
Para versiones de Python anteriores a 3.3, pkgutil.extend_path () El método se puede utilizar para definir paquetes de espacios de nombres explícitos:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Esta línea agrega cualquier paquete regular encontrado en la ruta de búsqueda al atributo path del paquete de espacio de nombres.
En escenarios donde coexisten paquetes regulares y de espacio de nombres, el método extend_path() mencionado anteriormente se ha ampliado para incluir paquetes implícitos. paquetes de espacios de nombres. Esto permite la siguiente estructura de directorios:
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
Con los archivos __init__.py que emplean extend_path(), import package.foo, import package.bar e import package.baz funcionarán como se esperaba.
A diferencia de pkgutil.extend_path(), el La función pkg_resources.declare_namespace() no se ha actualizado para admitir paquetes de espacios de nombres implícitos. Por lo tanto, es recomendable emplear la solución pkgutil.
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