[uylug-programming] Pregunta Pitónica

Federico Wagner federico.wagner at gmail.com
Wed Dec 19 13:20:50 PST 2012


2012/12/19 Carlos M. Martinez <carlosmarcelomartinez at gmail.com>

> Hola!
>
> Pregunta para los amigos pitonisos de la lista :-)
>
> Estoy construyendo un conjunto de scripts que importan datos de
> diferentes fuentes y elaboran estadísticas. Estos scripts dependen de
> varios paquetes que estan en repositorios (ipaddr, pymongo y otros) y de
> algunos paquetes que hemos desarrollado 'in house'.
>
> La pregunta es como estructurarían los directorios de toda la
> aplicación. Lo que tengo hoy es algo asi:
>
> top-level-dir +
>                       |
>                      +
>                       paq1
>                       paq2
>                       etc
>                       scripts
>
> En los scripts lo que hago al principio es :
>
> # import de modulos 'standard' (o instalados en el sistema)
> import ipaddr
> import pymongo
> import sys
>
> # import de modulos 'in house'
> sys.path += [".."]
> import paq1
> import paq2
>
>
1) Podes poner el directorio /opt/myprog/top-level-dir  en la variable
ambiente PYTHONPATH, lo cual hace que agregue ese directorio al sys.path
(esta variable es igual que la variable PATH, los caminos que queres
agregar van separados por :)

2) en la variable sys.argv[0]  tenes el path  y nombre del script, por lo
cual podes cambiar el código:

sys.path += [".."]

por el siguiente:

sys.path.append(os.path.split(os.path.dirname(sys.argv[0]))[0])


De las dos prefiero la opción (1), te permite poner los modulos en
cualquier otro directorio.

NOTA: la variable de ambiente PYTHONPATH por defecto no se crea, tenes que
crearla tu y solo agregas los directorios donde estén tus modulos que
quieras importar.




> Esto funciona perfecto, o al menos razonablemente bien :-)
>
> Ahora, no me convence del todo porque (a) tengo que ir al directorio
> 'scripts' para correr las cosas y me gustaria poder correrlas desde
> cualquier parte llamandolos como
> /opt/myprog/top-level-dir/scripts/script1.py, y (b) no me puedo sacar de
> la cabeza que seguro debe haber una manera mejor de hacerlo.
>
> La sugerencia prevalente en Internet parece ser empaquetar paq1 y paq2 e
> instalarlos en el sistema (en el PYTHONPATH), pero no es una opción para
> mi porque paq1 y paq2 estan en desarrollo también y cambian frecuentemente.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.uylug.org.uy/pipermail/uylug-programming-uylug.org.uy/attachments/20121219/e15cc660/attachment-0001.htm>


More information about the Uylug-programming mailing list