Así que querés comenzar un nuevo proyecto usando Python? ¡Felicitaciones! ¿Querés que tenga la estructura recomendada para proyectos modernos? ¿querés que sea instalable fácilmente? ¿Querés que no se te arme lio de dependencias que colisionan con las de otros proyectos ? Bien, te propongo esta receta.
Las herramientas
Virtualenv es una herramienta para aislar tu entorno de desarrollo python. Es muy pero muy útil para evitar conflictos entre las dependencias de tus distintos proyectos.
virtualenvwrapper es un conjunto de extensiones que hacen la vida del usuario virtualenv aún más feliz, permitiendo crear y borrar entornos virtuales, asociarlos a un proyecto, automatizar tareas al activar o desactivar uno, etc.
pip es la herramienta moderna, correcta y recomendada para administrar los paquetes python instalados en tu sistema/virtualenv. Es un reemplazo de easy_install
Distribute es la herramienta moderna y recomendada para distribuir tu paquete python. Es un fork de setuptools (que es, a su vez, una mejora sobre el módulo estándar distutils)
Skeleton es una herramienta que define plantillas para iniciar proyecto, generando la estructura básica necesaria. Es similar a PasteScript_ pero enfocado en esta tarea concreta, sin dependencias y compatible con Python 3.x
La receta
Instalá pip
Instalá virtualenwrapper y skeleton
$ sudo pip install virtualenwrapper $ sudo pip install git+git://github.com/stumitchell/skeleton.git#egg=skeleton
Notar que skeleton se está instalando desde un fork del proyecto original, que resuelve bugs de la versión original (aparentemente desmantenida)
Configurá virtualenvwrapper.
$ mkdir ~/.virtualenvs # acá se van a guardar tus entornos virtuales $ mkdir ~/proyectos # acá se van a guardar tus proyectos
Luego editá tu ~/.bashrc agregando las siguientes líneas
WORKON_HOME=$HOME/.virtualenvs PROJECT_HOME=$HOME/proyectos source /usr/local/bin/virtualenvwrapper.sh
y recargá tus cambios
Inicializá tu proyecto. Por ejemplo el proyecto zaraza
Se te solicitarán algunos datos (nombre del proyecto, autor, licencia, etc.) y ¡(casi) listo! Estarás trabajando en tu proyecto zaraza. Tu prompt se verá así:
¿Qué sucedió? Se creó un directorio ~/proyectos/zaraza para tu proyecto, asociado a un virtualenv ubicado en ~/.virtualenvs /zaraza. skeleton automáticamente creó una estructura básica de paquete python ~/proyectos/zaraza/src incluyendo un setup.py basado en distribute.
Instalá tu paquete en el virtualenv, para poder importarlo desde cualquier lado
Esto agrega el directorio de desarrollo de tu proyecto al PYTHONPATH del virtualenv, de modo que puedes importar zaraza desde cualquier lado dentro del virtualenv (por ejemplo, cuando hagas una carpeta src/test al nivel de '/src/zaraza'
¿Y ahora?
Cada vez que quieras trabajar en tu proyecto zaraza podes correr
Para salir del virtualenv
Algunos tips más a modo de despedida
Virtualenwrapper es totalmente hookeable y extensible. Esta receta propone usar skeleton (que funciona como plugin de virtualenvwrapper.project) para crear una estructura de paquete estándar básica, pero hay plugins para proyectos más específicos. Por ejemplo virtualenwrapper.django
El comando usado en el paso 4 (mkproject) es un wrapper sobre el comando principal de virtualenvwrapper mkvirtualenv, que acepta muchos parámetros opcionales. Ejecutá mkproject_help o mkvirtualenv --help para saber más.
Y ya sabés ...