Archivo de la etiqueta: python

Installing scipy in a Python virtual environment

Using virtualenv to create different python environments is a common practice while working in multiple projects. In addition, it may happen that we don’t have root access (i.e. admin rights) in the machine that we are using. Virtual environments are also quite useful in such situations. However, some python packages require extra dependencies that are not straightforward to install.

Installing scipy in a virtual environment should be initially quite straightforward:

python virtualenv.py myVE
source myVE/bin/activate
pip install scipy

However, during the installation of scipy I found the following three problems that took me several hours to solve. Here I share the solutions that worked for me in case they can be useful for someone else (specially myself in the future).

ImportError: libatlas.so.3: cannot open shared object file: No such file or directory
This error appears even having Atlas library properly installed. Apparently, it’s an error that only happens with numpy 1.9.2 in a virtual environment as I found in a small comment in Stack Overflow. The solution is to install the previous version:

pip install numpy==1.9.1

error: library dfftpack has Fortran sources but no Fortran compiler found
Despite my system had 3 different versions of gfortran, none of them were found by the installer. The solution is to create a symbolic link and then include it in your PATH variable.

ln -s /usr/bin/gfortran-4.7 ~/bin/gfortran
export PATH=$PATH:~/bin

ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
In this case, OpenBLAS library was not installed in the system, so the solution was to compile and install it manually. You can get the sources in the OpenBLAS website and then follow the installation guide.

make
make PREFIX=~/openblas install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/openblas/lib
export PATH=$PATH:~/openblas/bin

Mostrar metadatos de música, imágenes y pdf en Nautilus

Intentando organizar un poco los artículos en PDF que tengo, me he dado cuenta que sería útil poder visualizar el autor y el título del mismo en el navegador de archivos de Gnome (Nautilus).

Buscando en Google he encontrado que ya existía algo similar, pero que solo servía para música e imágenes. Es una extensión que se llama nautilus-columns (hebra en Ubuntu Forums). Al ver que estaba hecha en python me he puesto a modificarla para añadirle soporte de PDFs. No ha resultado muy complicado gracias a la librería pyPdf.

Podéis descargar el script en http://pastebin.com/WxspTtvL

Son necesarias las siguientes dependencias:

# apt-get install python-nautilus python-mutagen python-pyexiv2 \
python-kaa-metadata libnautilus-extension1 python-pypdf

Una vez instalado, tenéis que activar los campos Title y Artist, para mostrar el título y el autor, respectivamente.

Editado: si usáis Ubuntu, podéis descargar la extensión con esta nueva modificación desde el repositorio oficial.


$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install nautilus-columns
$ nautilus -q

Enviar email con valores de una base de datos UTF-8 en Python

Si tenemos un base de datos MySQL y queremos enviar emails usando la librería smptlib de python, nos puede dar más de un quebradero de cabeza si queremos usar la codificación UTF-8. Pongo aquí este breve manual que he hecho con la ayuda de Héctor, un compañero del proyecto en el que estoy trabajando ahora mismo.

Si usamos la librería MySQLdb, tendremos que añadir unos parámetros adicionales para indicarle que nos vamos a conectar a una base de datos con codificación UTF-8.

Ahora creamos el mensaje a enviar:

Y por último, lo enviamos a través del servidor de correo:

Haciendo un planet en python

La práctica 5 de AAP consistía en crear un programa que recogiese las noticias de diferentes fuentes y las mostrase en un sólo documento HTML, lo que se viene a denominar un planet en la jerga bloguera.

En mi caso lo he programado en Python haciendo uso de la librería feedparser y genero una página HTML así como un feed usando la librería PyRSS2Gen.

He usado la codificación de caracteres utf-8 en todo momento, pero tengo un problema al generar el archivo html ya que no se guarda como utf-8 (si lo abrimos con un editor como geany podemos comprobar que está “sin codificación”), y luego al mostrarlo en el navegador no se ve bien. El caso es que en mi máquina sí se muestra correctamente, pero en el servidor donde lo he alojado no, como podéis ver en http://swecai.ugr.es/~planet_etsiit. Si en el navegador seleccionáis la codificación unicode, se ve bien, e incluso en el header está el meta indicando que es utf-8. ¿Alguna idea de cómo solucionar esto? Editado: blaxter ha dado con la tecla en este comentario. ¡Gracias!

Podéis descargar la aplicación libremente: planet.tgz. En el fichero index.html viene una descripción más detallada del trabajo realizado y en la carpeta scripts se encuentra el fichero actualizar.py que se encarga de generar los ficheros planet.html y feed.xml a partir de los feeds situados en sites.txt cada cierto tiempo, que podemos indicar usando una tarea cron.

La mano inocente automágica

Por segundo año consecutivo va a tener lugar en el grupo flickr de Granada el juego del amigo invisible. Se trata de regalar una fotografía imitando el estilo de la persona que te toque, que se realizará mediante sorteo entre los fotógrafos participantes. Teniendo en cuenta que hay más de 50 personas inscritas, hacer el emparejamiento a mano es bastante tedioso, así que me he hecho un script en python que se encargará de esta tarea.




		


Los datos de entrada los coge de un fichero “listado.txt”, que tiene que estar en el mismo directorio que el script que hay que pasarle como parámetro y estará formado por los nombres de los participantes, uno por línea. Seguramente se pueda hacer más eficiente y más bonito, pero para hacerlo en 10 minutos antes de irse a dormir, cumple perfectamente con su función :)

Trabajo futuro: enviar un email al usuario con su amigo invisible.

Actualización: corrijo el script, usando el propuesto por Loren, ya que podría darse algún caso en el que el amigo invisible de una persona sea ella misma y esto no se controlaba.

DjangoStack: instalador de django multiplataforma

Andaba yo líado instalando django en MacOS X para ir refrescando cosillas, y conseguí hacerlo funcionar con algún manual que encontré por ahí. Pero de un día para otro dejó de funcionar. Intenté arreglarlo pero no daba con la tecla, hasta que finalmente encontré DjangoStack, que no es ni más ni menos que un instalador “todo en uno” de Python, Django, MySQL y Apache, además para Linux y Mac. Funciona muy bien y a la primera, ¿qué más se puede pedir?

aspecto del instalador

Sigue leyendo