Tag Archives: *nix

Como crear un proyecto Python/Django

Django, es un framework web de alto nivel desarrollado en lenguaje Python para proyectos web creados con Python. Python es probablemente el lenguaje más brillante creado en los últimos tiempos. No solo por su sintaxis nítida, sino también por su sencillez, extensibilidad y soporte de la comunidad.

Como ejemplo de aplicaciones web creadas con Python y Django tenemos

Disqus
Pinterest
Instagram
Mahalo
bitbucket
lanyrd
support.mozilla.com
addons.mozilla.org
The Onion
EveryBlock
GiantBomb
ComicVine
MichaelMoore.com
newyorktimes.com
washingtonpost.com
guardian.co.uk
lawrence.com

y un largo etcétera.

En esta entrada voy a tratar de definir las claves para iniciar un proyecto Python Django bien. Sobretodo la parte referida a DevOps (Operaciones de desarrollo).

Lo primero, decir que yo trabajaré en entorno Linux (Ubuntu 14.04.1 LTS, cualquier otra distribución basada en Debian funcionará igual), pero también es posible hacerlo desde Windows bajando los paquetes correspondientes a este sistema operativo. Igualmente es recomendable trabajar en entorno Linux o Mac ya que dentro del sector es lo habitual y por lo tanto es más fácil acceder a información frente a problemas que hallemos. Aún así, no suele ser problema trabajar en Windows.

NOTA: En Windows alguna vez me he encontrado con problemas, por ejemplo, trabajando con otro framework Python llamado kivy.

Empezamos instalando Python, si no lo tenemos instalado por defecto. Desde la terminal (ctrl+alt+t):

Desde la web:

Desde el repositorio de Ubuntu:

Por defecto Ubuntu viene con la versión 2 de python y aunque es totalmente válida para el desarrollo (de hecho la variedad de snippets y fragmentos de código que puedas encontrar en la web es mayor) trabajaremos con la última versión. Especialmente para evitar frustrarnos con el “problema” de la codificación utf-8.

Una vez tengamos instalado Python, pasamos a la instalación de PIP.

PIP es un gestor de paquetes Python (similar a NPM para Node.js) que nos ahorrará mucho tiempo descargando, instalando y actualizando librearías. Además nos ayudará si pretendemos montar un entorno de integración continua automatizado, del que hablaré en futuras entradas. Lo instalaremos desde el repositorio oficial de Ubuntu:

También podemos instalarlo mediante el script de la web oficial. En un comando sería:

Personalmente recomiendo instalarlo desde los repositorios oficiales de Ubuntu, así las actualizaciones serán más sencillas de instalar con “sudo apt-get update -y”

Con PIP instalado, pasamos a instalar VirtualENV Wrapper. VirtualENV Wrapper son una serie de extensiones para VirtualENV. VirtualENV es una herramienta para crear entornos Python aislados. En definitiva:

Para usar VirtualENV Wrapper tendremos que hacer una pequeña modificación en ~/.bashrc. Vamos con ello:

1. Primero creamos el directorio donde se almacenarán los entornos virtuales con los que trabajaremos.
2. Creamos un directorio para almacenar nuestros proyectos
3. Abrimos ~/.bashrc con Vi para hacer los cambios oportunos:

Al final del archivo añadimos:

Finalmente recargamos ~/.bashrc

Listo. Solo tendremos que hacerlo una vez, ya que cada vez que se inicie sesión en el equipo, se auto cargará ~/.bashrc.

Lo bueno de usar VirtualENV es que podemos crear un entorno de desarrollo Python completamente aislado del entorno Python instalado en nuestro equipo. Esto, que en principio parece un trabalenguas, quiere decir que podemos crear un entorno virtual Python nuevo para cada proyecto sin afectar a nuestro entorno de desarrollo base. Esto es muy útil si no queremos volvernos locos con incompatibilidades entre paquetes Python, si trabajamos con varias versiones de Python o si estamos trabajando en varios proyectos Python a la vez.

VirtualENV Wrapper es, como su nombre indica, un wrapper para VirtualENV que nos permitirá crear nuevos entornos de desarrollo y movernos entre éstos con un un par de comandos. Veamos un ejemplo:

1. Creamos un entorno virtual Python.
2. Seleccionamos el entorno virtual creado.
3. Ya podemos trabajar con este entorno de desarrollo. Por ejemplo instalamos un paquete cualquiera.
4. Salimos del entorno de desarrollo.
5. Creamos un segundo entorno de desarrollo, esta vez para otro proyecto en el que trabajaremos con Python 3.4.
6. Seleccionamos el segundo entorno de desarrollo.
7. Instalamos un paquete cualquiera.
8. Desactivamos el segundo entorno de desarrollo
9. Volvemos al primer entorno.
10. Listamos los paquetes instalador y vemos que solo tenemos instalado PAQUETE y no PAQUETE2. Funciona!
11. Desactivamos el entorno virtual y eliminamos ambos entornos virtuales.

Otros comandos útiles son:

lsvirtualenv, para listar los entornos virtuales disponibles.
cdvirtualenv, para navegar al directorio del entorno virtual activado.

Se pueden consultar todos los comandos, en la documentación del proyecto.

Una vez tengamos claro el funcionamiento de VirtualENVWrapper podemos pasar a crear un entorno virtual de desarrollo Python para nuestro proyecto Django. Lo hacemos así:

Me parece muy importante, además de documentar los proyectos, tratar de usar nombres claros y concisos para todo. Personalmente cuando creo un nuevo entorno virtual Python le doy un nombre siguiendo este esquema: nombre_proyecto-version_python.

Ahora ya estamos listos para instalar Django dentro de nuestro entorno virtual, lo hacemos con:

Con esto ya tenemos Django instalado y tenemos el entorno preparado para empezar el desarrollo (a falta de configurar nuestro cvs). Veremos como configurar GIT, Django y cómo estructurar nuestro proyecto adecuadamente en la próxima entrega.

Saludos,