[pyar] Importación de módulos

Alejandro Santos listas en alejolp.com
Vie Feb 27 04:44:24 ART 2015


2015-02-27 0:41 GMT+01:00 Leandro E. Colombo Viña <colomboleandro en gmail.com>:
>
> app/
>     run.py
>     controlador/
>         __init__.py
>         controlador.py
>     db/
>         __init__.py
>         db.py
>     monitor/
>         __init__.py
>         monitor.py
>
> La idea es la siguiente: la app se corre desde run.py, es una aplicación web
> en Flask que consulta una base de datos y controla unos dispositivos
> electrónicos. En monitor está toda la parte web y lo que sería la interfaz
> de usuario. En db está la configuración de la base de datos (ahí se importa
> el conector y está la clase que maneja la conexión) que usaría tanto el
> monitor como el controlador. Y en controlador está todo lo necesario para
> comunicarse con la electrónica.
>

La estructura que elegiste me suena muy parecida a Java, donde en Java
cada paquete es un directorio aparte.

¿Por qué tenés tres directorios, controlador, db, monitor? ¿Pensás
tenés más controladores, bases de datos y monitores?

De otra forma, con tener algo así debería alcanzar:

app/
    run.py
    controlador.py
    db.py
    monitor.py

Recién cuando tengas varios modulos que lógicamente sean parecidos,
por ejemplo si tenés más de media docena de dispositivos electrónicos
y el código lo repartís en varios archivos, es cuando le veo sentido a
hacer un directorio aparte. Lo mismo con los otros módulos, db y
controlador.

> El tema es que queremos ver cuál es la mejor manera de realizar la
> importación de los parámetros de configuración de la base de datos para
> ambos paquetes (monitor y controlador).

¿Dónde y cómo están estos parámetros? ¿Es un archivo .ini, xml?

> Recomiendan usar importaciones relativas? O cargar en el sys.path los
> directorios donde estan los paquetes e importarlos así?
>

No, no modifiquen sys.path a menos que entiendan todas las
consecuencias de hacerlo. Sys.path es para configurar diferentes rutas
bases de colecciones de paquetes y librerías, eventualmente la raíz de
tu aplicación, y es lo que usa virtualenv para hacer su magia.

La consecuencia más importante y grave es que vas a tener aliasing de
módulos. Si en tu sys.path tenés tanto el path a "app" como a
"app/controlador" vas a poder importar el modulo controlador.py de dos
formas diferentes, y esto es malo porque para Python van a ser dos
módulos y dos tipos distintos.


-- 
Alejandro Santos


More information about the pyar mailing list