Home > General > Instalando Python 2.7 y Django 1.3 en Dreamhost

Instalando Python 2.7 y Django 1.3 en Dreamhost

septiembre 1, 2011

Dreamhost es genial para ejecutar sitios web desarrollados con Django. Nos dan acceso SSH que nos permite ejecutar los comandos de manage.py con facilidad; ejecutan Django con Passanger que es más rápido y usa menos memoria que mod_python; y por supuesto: recursos ilimitados, bajos costos y excelente soporte técnico.

Para ejecutar una aplicación Django en Dreamhost solo es necesario configurar el dominio para que utilice Passenger. Es cuestión de editar el dominio y seleccionar la caja que dice “Passenger (Ruby/Python apps only)” y asegurarse que la carpeta pública sea algo como /dominio.com/public/.

El panel de control configura el resto. Sin embargo, la versión de Python y Django que instalan en sus servidores está muy desactualizada (Python 2.4, Django 1.1 por defecto). Por suerte nos permiten compilar programas en el servidor así que instalar una versión moderna es extremadamente fácil.

Este es el proceso que yo utilizo para instalar versiones actualizadas de Python y Django en mis servidores ( sí, plural 😛 ). Pueden ir copiando y pegando línea por línea en la ventana SSH. Casi podría ser un script automatizado, excepto por que hay que salir y volver a entrar en cierta parte.

Para empezar, hay que conectarse por SSH a su servidor. En Windows pueden usar Putty, en Linux y MacOS ya deberían tener instalado el comando ssh que viene con OpenSSH.

Una vez conectados, vamos a crear una carpeta para descargar los instaladores.

mkdir ~/installers
cd ~/installers

Ahora vamos a descargar, compilar e instalar Python 2.7.2 en unos pocos comandos:

wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar -xzvf Python-2.7.2.tgz
cd Python-2.7.2
nice ./configure --prefix=$HOME/local
nice make
nice make install

Ahora tenemos que configurar la shell para que use el nuevo Python 2.7.2 y no la versión desactualizada que estaba instalada.

echo "export PYTHONPATH=\"$HOME/local/lib/python2.7/site-packages\"" >> ~/.bash_profile
echo "export LD_LIBRARY_PATH=\"$HOME/packages/lib\"" >> ~/.bash_profile
echo "export PATH=\"$HOME/local/bin:$PATH\"" >> ~/.bash_profile
logout

Esta es la parte en que tenemos que salir de la sesión y volver a ingresar.

Ahora vamos a comprobar que el nuevo Python quedó instalado. El siguiente comando debería decir algo como /home/<usuario>/local/bin/python

which python

¿Funcionó? Bueno, continuemos.

Nos falta bajar easy_install que luego utilizaremos para actualizar los demás paquetes.

cd ~/installers
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg

Ahora podemos usar el comando easy_install para bajar el resto de utilidades.

easy_install http://pypi.python.org/packages/source/P/Paste/Paste-1.7.5.1.tar.gz
easy_install PIL
easy_install MySQL-python
easy_install Django

La utilidad de Django y MySQL-python debería ser bastante obvia en este punto ¿No?. PIL es un paquete para manipular imágenes (Para crear thumbnails, dibujar y convertir imágenes). Y Paste lo utilizaremos más adelante para depurar problemas en el servidor.

Nos falta configurar Passenger para que utilice nuestro Python. Para esto creamos un archivo passenger_wsgi.py con el siguiente contenido

#!$HOME/local/bin/python
# -*- coding: utf-8 -*-
INTERP = "/home/<usuario>/local/bin/python"
DEBUG = True

import sys
import os
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = "<proyecto>.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

if DEBUG:
	from paste.exceptions.errormiddleware import ErrorMiddleware
	application = ErrorMiddleware(application, debug=True)

Recuerden cambiar <usuario> y <proyecto> por el nombre de su usuario y proyecto. Hay una variable DEBUG que permite mostrar en el browser las excepciones que se produzcan. En producción se debería desactivar, pero es muy útil mientras estamos desarrollando. Para esto es que necesitábamos Paste.

Su carpeta $HOME ahora se debería ver así:

installers/
local/
dominio.com/
dominio.com/public/
dominio.com/<proyecto>
dominio.com/passenger_wsgi.py

Con esto ya debería funcionar. Puedes probar en el browser si carga tu aplicación y si hay algún error te debería mostrar la excepción. No olvides desactivar la depuración una vez que pases a producción poniendo DEBUG=False en passenger.py y en settings.py.

Categories: General