08 agosto 2012

MySQLdb y Python en Mac OSX Lion

Estos días estoy aprendiendo algo de Python. El porqué? Es un poco complejo, pero el inicio de todo es que el entorno de desarrollo que me veo obligado a utilizar es una máquina virtual Windows XP, dentro de una máquina Windows XP (no entraré en bucle...) con sólo 3Gb de RAM. Esto implica que mi MV sólo dispone de 1.7Gb, y si dentro tengo que trabajar con Eclipse Indigo, que le gusta la memoria más que a mi el chocolate, pues... tenemos una situación.

He intentado pasar parte del código a PHP, y durante una semanita he estado dándole vueltas, hasta que he descubierto que PHP también consume memoria en cantidades industriales, y que para tratar un fichero de texto de 10Mb, y meterlo en un Excel con una librería el problema de la memoria se disparaba.

Así que vamos a probar con Python. Es sencillo de aprender. No me acaba de gustar que no sea un lenguaje muy tipado, eso de que puedas meter cualquier cosa en una caja, sin decir, qué forma ha de tener la caja, no me acaba de cuadrar. Pero está muy bien. También he aprovechado para programar en Mac con el Vi. Me siento casi como un informático...!

Cuando después de un par o tres de días, mi proceso ya "parsea" convenientemente el fichero, llega el momento de guardar los datos de manera persistente. Y entran entonces en juego tres opciones: Excel, que será el producto final; MySQL, que es como lo tengo actualmente implementado en la versión Java; y MongoDB, que es algo nuevo para mi y al cual le veo grandes posibilidades.

Con el MySQL es con el que he tenido más problemas a la hora de instalarlo. He localizado al final cómo hacerlo:

Primero, instalo la librería con easy_install:

sudo easy_install MySQL-python

Pruebo que todo esté bien:


MacBookPro-de-JoseLuis:Downloads jherranzm$ python 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "", line 1, in
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/__init__.py", line 19, in
  File "build/bdist.macosx-10.7-intel/egg/_mysql.py", line 7, in
  File "build/bdist.macosx-10.7-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/jherranzm/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/jherranzm/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
  Reason: image not found



Para encontrar dónde está realmente la librería que falla utilizo el comando locate:

locate libmysqlclient.18.dylib

El sistema espera encontrar la librería en /usr/lib. Para solucionarlo hay que crear un enlace simbólico de la librería que queremos a la posición donde se ubicará el enlace:

sudo ln -s /usr/local/mysql-5.5.23-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

Con estes cambio, vuelvo a probar, y voilà, funciona (ya no da el error) :


MacBookPro-de-JoseLuis:Downloads jherranzm$ python Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> quit()

Ahora me toca seguir con el programa...

No hay comentarios: