Archivo de la categoría: Python

Pyramid framework en OpenShift

Pyramid es un framework de python para desarrollar aplicaciones web. Sus fuertes son la velocidad, flexibilidad y escalabilidad que ofreces a los desarrolladores. No es un full-stack framework (Full-Stack: el objetivo principal de los full-stack es proveer un conjunto de componentes que abarque todo lo que necesitas para construir una aplicación web, asegurandose que todos esos componentes funcionen bien entre si.) como Django y no es un microframework como Flask o Bottle. Y a su vez OpenShift es una plataforma deployar aplicaciones en la “nube” (algo así como heroku, cloudcontrol, phpfog, Amazon, etc.) bajo la infraestructura de Red Hat. Openshift permite integrar (sin necesidad de otro servicio) base de datos en MySQL, MongoBD, PostgreSQL, etc.

Requisitos para esta guía:

– Linux Fedora (es un requisito por los repositorios, pero si utilizan otra distribución no hay problema).
– Cuenta en Open Shift.
– Habilitar base de datos MySQL en consola de aplicaciones en Open Shift

Lo primero es registrarnos en Open Shift http://openshift.redhat.com.
Luego creamos nuestra aplicación en la administración de aplicaciones y en el momento de seleccionar el lenguaje a utilizar, seleccionamos Python (obvio o no? xD ).

La configuración de la aplicación en OpenShift no es parte de esta guía, asi que lo saltaremos. Si no saben como utilizar Open Shift les recomiendo utilizar la documentación disponible en el mismo sitio, y las guías de instalación en diferentes sistema operativos.

Ahora los pasos que realmente nos interensan.

Instalamos git como controlador de versiones (Requisito para modificar el código de nuestra aplicación).

[sourcecode language=”bash”]yum install git[/sourcecode]

Recuerden agregar su llave pública en la consola de administración de aplicaciones en el sitio de Open Shift.

Instalamos las herramientas de clientes de Open Shift. Con esta herramienta se pueden administrar el estado de las base de datos de nuestras aplicaciones, crear nuevas aplicaciones, etc.
Según la distribución de linux que tengamos, el nombre del paquete puede cambiar.

[sourcecode language=”bash”]yum install rubygem-rhc[/sourcecode]

Descargamos nuestro código fuente (reemplazar por su repositorio).

[sourcecode language=”bash”]git ssh://xxXXxxXXxXXxXXXxxx@xxxxx-xxxx.rhcloud.com/~/git/xxxxxx.git/[/sourcecode]

Si no hemos instalado la base de datos mysql, lo hacemos ahora. (Esta tarea también se puede realizar a través del administrador de aplicaciones de Open Shift). Es importante reemplazar el nombre del proyecto y el email por el mismo que utilizaron al crear su cuenta de Open Shift.

[sourcecode language=”bash”]rhc-ctl-app -a nombreproyecto -e add-mysql-5.1 -l your@email.com[/sourcecode]

Tenemos diversas opciones para administrar nuestra base de datos:

[sourcecode language=”bash”]rhc app cartridge start -a nombreproyecto -c mysql-5.1
rhc app cartridge stop -a nombreproyecto -c mysql-5.1
rhc app cartridge restart -a nombreproyecto -c mysql-5.1
rhc app cartridge reload -a nombreproyecto -c mysql-5.1
rhc app cartridge status -a nombreproyecto -c mysql-5.1
rhc app cartridge remove -a violeta -c mysql-5.1[/sourcecode]

Entramos al directorio del proyecto.

[sourcecode language=”bash”]cd nombreproyecto[/sourcecode]

Hacemos la referencia a pyramid.

[sourcecode language=”bash”]git remote add upstream -m master git://github.com/lmacken/pyramid-openshift-quickstart.git[/sourcecode]

 

[sourcecode language=”bash”]git pull -s recursive -X theirs upstream master[/sourcecode]

Y finalmente guardamos.

[sourcecode language=”bash”]git push[/sourcecode]

Eso es todo, espero haya servido esta guía y si quieren aportar algo bienvenido sea.
Recuerden visitar nuestra comunindad de Python Chile y participar en nuestros MeetUp

Astrometría en Python con PyEphem


  

Uno de mis hobbies es la Astronomía y eso me ha llevado a investigar las herramientas que existen actualmente para realizar cálculos de Astrometría. Leyendo en internet y también por recomendación de amigos decidí utilizar Python para este entrada, por sus avances en materias científicas en relación a otros lenguajes de desarrollo.

Sin ningún fin es particular decidí utilizar PyEphem para ejemplificar la utilización de Astromería en Python. PyEphem es un módulo para realizar cálculos astronómicos tales como posiciones de astros, planetas, horas de orto y ocaso de los astros, etc. También se puede calcular la posición de cometas, asteroides y satélites una vez proporcionados los elementos orbitales de los mismos.

Comencemos! Para este ejemplo utilizo una distribución basada en Red Hat, pero pueden utilizar la que deseen, aunque los nombres de los paquetes pueden variar sutilmente.

Porsupuesto lo primero que debemos verificar, son los paquetes necesarios: python, python-devel para las herramientas de desarrollo y gcc para la compilación de pyephem.

sudo yum install python python-devel gcc

Luego a través del gestor de paquetes de python easy_install instalamos otro gestor llamado pip.

sudo easy_install pip

Y finalmente instalamos PyEphem.

sudo pip install pyephem

Y ahora un ejemplo de utilización.

vim ejemplo_pyephem1.py
# Importamos la libreria de PyEphem
import ephem as ep

# Creamos un objeto Martes, ep.now() hace referencia a este momento
martes = ep.Mars(ep.now())

# Imprimimos la constelacion en la cual se encuentra Martes en pantalla
print ep.constellation(martes)

Ejecutamos.

python ejemplo_pyephem1.py

Otro ejemplo para soltar más la muñeca

vim ejemplo_pyephem2.py
#Importamos nuestra libreria
import ephem as ep

# Creamos un observatorio ubicado en Santiago.
# Podemos agregar y modificar las coordenadas de nuestras ciudades en:
# /usr/lib64/python2.7/site-packages/ephem/cities.py
santiago = ep.city("Santiago")

# Obtenemos la fecha actual de Santiago
santiago.date = ep.now()
print "Fecha hoy: ", santiago.date

# Anulamos la Refraccion atmosferica
santiago.pressure = 0 

# Creamos un objeto Martes y uno Saturno en el observatorio de Santiago.
martes = ep.Mars(santiago)
saturno = ep.Saturn(santiago)

# Imprimimos la altura y azimut desde el Observatorio de Santiago.
print "Martes: ", martes.alt
print "Saturno: ", saturno.alt

# Imprimimos la separacion entre ambos planetas 
print "Separacion entre Martes y Saturno", ep.separation(martes,saturno)

# Proxima luna llena en el observatorio de Santiago
print "Luna llena: ", ep.next_full_moon('2012')

Ejecutamos.

python ejemplo_pyephem2.py

Más información en la página oficial de PyEphem.

Recuerden visitar nuestra comunidad de Python Chile!

Primeros pasos en Pypy


Pypy es una rápida y potente alternativa de implementación de Python 2.7.1+, la cuál nos ofrece variadas ventajas y caracteristicas que la diferencian de otras impelentaciones.

Velocidad: Gracias a su Just-in-time compilador, los programas en Python suelen correr más rápido en Pypy. JIT: En informática, la compilación en tiempo de ejecución (también conocida por sus siglas inglesas, JIT, just-in-time), también conocida como traducción dinámica, es una técnica para mejorar el rendimiento de sistemas de programación que compilan a bytecode, consistente en traducir el bytecode a código máquina nativo en tiempo de ejecución. La compilación en tiempo de ejecución se construye a partir de dos ideas anteriores relacionadas con los entornos de ejecución: la compilación a bytecode y la compilación dinámica. Más información aquí.
Uso de memoria: Gran consumo de memoria de programas Python podría terminar tomando menos espacio que lo hacen en CPython.
Compatibilidad: Pypy es altamente compatible con el código existente Python. Es compatible y puede funcionar bibliotecas ctypes populares de Python como Django.
Sandboxing: Pypy ofrece la posibilidad de ejecutar código no firmado de forma totalmente segura.
Stackless: Pypy puede ser configurado para ejecutarse en el modo de Stackless, proporcionando micro-temas de concurrencia masiva.

Comenzamos con la instalación.
Primero debemos reparar nuestra máquina instalando las siguientes librerias:

En Fedora

$ sudo yum install gcc make python-devel libffi-devel pkg-config zlib-devel bzip2-devel ncurses-devel expat-devel openssl-devel gc-devel python-sphinx python-greenlet

En Ubuntu

$ sudo apt-get install gcc make python-dev libffi-dev pkg-config libz-dev libbz2-dev libncurses-dev libexpat1-dev libssl-dev libgc-dev python-sphinx python-greenlet

Luego instalamos pypy. Esto podemos realizarlo desde el sitio web aquí

o con los gestores de paquetes de Unix:

En Fedora

$ sudo yum install pypy pypy-devel pypy-libs

y en Ubuntu

$sudo apt-get install pypy pypy-dev

Si descargamos el de forma manual hacemos lo siguiente:

Descomoprimimos el archivo

$ tar -xvf pypy1.7 pypy1.7.tar.bz2

Lo movemos a la carpeta que corresponde

$ sudo mv pypy1.7 /opt/

Y por último creamos un enlace simbolico para que pueda utilizarse en nuestro bash

$ sudo ln -s /opt/pypy-1.7/bin/pypy /usr/local/bin/pypy

Y con esto ya está listo para utilizar!

[pablo@tuidee ~$] pypy

En mi caso tuve problemas con el versionado de algunas librerías, ya que al momento de ejecutar con comando pypy en la terminal me arrojaba el siguiente error:

[pablo@tuidee ~$] pypy
pypy: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
pypy: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
pypy: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file: No such file or directory

Esto lo solucioné de la siguiente forma:
En Fedora 32 bit

$ sudo ln -s /usr/lib/libssl.so.10 /usr/lib/libssl.so.0.9.8
$ sudo ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8
$ sudo ln -s /usr/lib/libbz2.so /usr/lib/libbz2.so.1.0

En fedora 64 bits

$ sudo ln -s /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.0.9.8
$ sudo ln -s /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.0.9.8
$ sudo ln -s /usr/lib64/libbz2.so /usr/lib64/libbz2.so.1.0

En Ubuntu se puede realizar a través del gestor de paquetes::

$ sudo apt-get install libssl0.9.8:i386

ya conocen el resto de los comandos necesarios para solucionarlo.

Recuerden verificar la versión de las librerias que necesitan, ya que pueden variar.

Y porsupuesto visiten la página web oficial de Pypy aquí.

Saludos y pronto continuaré con un pequeño ejemplo de utilización.