Estoy buscando técnicas que permitan a los usuarios sobrescribir módulos en una aplicación o ampliar una aplicación con módulos nuevos.¿Cuáles son las técnicas más utilizadas para habilitar las extensiones de código de usuario en Python?
Imagine una aplicación llamada pydraw. Actualmente proporciona una clase Circle, que hereda Shape. El árbol de paquetes podría ser:
/usr/lib/python/
└── pydraw
├── __init__.py
├── shape.py
└── shapes
├── circle.py
└── __init__.py
Ahora supongamos que me gustaría para permitir el descubrimiento dinámico y carga de los módulos de usuario que implementan una nueva forma, o tal vez incluso la propia clase Shape. Parece más sencillo para el árbol de un usuario que tiene la misma estructura que el árbol de aplicaciones, tales como:
/home/someuser/python/
└── pydraw
├── __init__.py
├── shape.py <-- new superclass
└── shapes
├── __init__.py
└── square.py <-- new user class
En otras palabras, me gustaría que desea combinar y enmascarar un árbol de la aplicación con el mismo nombre los archivos de la árbol del usuario, o al menos obtener esa estructura aparente desde el punto de vista de Python.
Luego, al configurar sys.path o PYTHONPATH, pydraw.shapes.square podría ser detectable. Sin embargo, la búsqueda del camino del módulo de Python no encuentra módulos como square.py. Supongo que esto se debe a que __method__
ya contiene un módulo principal en otra ruta.
¿Cómo lograrías esta tarea con Python?
Gracias Julien- extend_path es exactamente lo que estaba buscando! Creí erróneamente que un paquete se podía cargar desde un solo árbol de directorios. – Reece