"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 crear paquetes de espacios de nombres en Python para módulos compartidos?

¿Cómo crear paquetes de espacios de nombres en Python para módulos compartidos?

Publicado el 2024-11-08
Navegar:644

How to Create Namespace Packages in Python for Shared Modules?

Creación de paquetes de espacios de nombres en Python para la distribución de módulos compartidos

Introducción

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.

Implementación de paquetes de espacios de nombres

Paquetes de espacios de nombres implícitos en Python 3.3

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.

Solución anterior a Python 3.3

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.

Uso de Regular y Espacio de nombres Paquetes juntos

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.

pkg_resources .declare_namespace()

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.

Declaración de liberación Este artículo se reimprime en: 1729575676 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