Creando múltiples módulos de Python en diferentes directorios que comparten una parte de la estructura del paquete

Estoy trabajando en un proyecto de Django que contiene una sola aplicación. La aplicación se lanzará bajo la GPL, por lo que quiero desarrollarla por separado del proyecto, un sitio personal que utiliza la aplicación. Estoy tratando de usar una estructura de paquete basada en mi nombre de dominio tanto para el proyecto como para la aplicación, y ahí es donde me encuentro con problemas.

Aquí está mi estructura de archivos (con archivos __init__.py donde sea apropiado):

$HOME/django-sites/mydomain
$HOME/django-apps/mydomain/cms

Y mi PYTHONPATH:

$HOME/django-sites:$HOME/django-apps

Si enciendo un intérprete de Python (desde cualquier directorio del sistema de archivos) puedo importar clases desde el sitio, pero no desde la aplicación. Si invierto el orden de las dos entradas en PYTHONPATH (primero las aplicaciones, luego los sitios) puedo importar desde la aplicación pero no desde el sitio.

Parece que Python solo está intentando importar desde la primera entrada en PYTHONPATH que contiene la primera parte del nombre del paquete. ¿Es eso correcto? ¿Es este el comportamiento esperado? Si es así, solo puedo pegar módulos en estructuras de paquetes como domain / app1, domain / app2 si viven en la misma estructura de directorio, independientemente de PYTHONPATH.

No deja de mostrarse porque puedo cambiar el nombre del sitio, pero es muy diferente de lo que esperaba. El tutorial de Python menciona __path__, pero no tengo idea de cómo usarlo:

Los paquetes soportan un atributo especial más, __path__. Esto se inicializa para ser una lista que contiene el nombre del directorio que contiene __init__.py del paquete antes de que se ejecute el código en ese archivo. Esta variable puede ser modificada; hacerlo afecta a futuras búsquedas de módulos y subpaquetes contenidos en el paquete.

Si bien esta característica no suele ser necesaria, se puede usar para ampliar el conjunto de módulos que se encuentran en un paquete.

¿Alguien más ha encontrado esto? ¿Hay algo que pueda hacer con __path__ para que esta función funcione como se espera?

Respuestas a la pregunta(3)

Su respuesta a la pregunta