views:

1158

answers:

2

A colleague got this error message when trying to use MySQLdb from Django:

[...] ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so, 2): Symbol not found: _mysql_affected_rows Referenced from: /Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so Expected in: dynamic lookup

He's using OS X 10.5, Python 2.5 (arriving with OS X), MySQL 5.1 & MySQLdb 1.2.3c1.

Any idea how to attack this?

A: 

Yes, the MySQLDb egg was compiled against a different version of libmysqlclient than the version present in the system. You need to either get a proper egg (uninstalling the previous) or to build MySQLDb from scratch to compile it against the library present in your system.

I don't know why but I think your colleague might be interested in this question:

http://stackoverflow.com/questions/1297917/configuring-django-to-use-remote-mysql-server

Vinko Vrsalovic
+4  A: 

It might be best if you install mysql and it's Python bindings from scratch, I use the following steps whenever I need MySQLdb on OS X 10.4 or 10.5:

  1. Install MySQL for your system, the dmg installer should be sufficient

  2. The default location of MySQL will be somewhere around: /usr/local/mysql-5.0.45-osx10.4-i686. From /usr/local/mysql/lib, create a soft link:

    ln -s ../../mysql-5.0.45-osx10.4-i686/lib mysql

  3. Download the MySQLdb source and unpack it

  4. Edit the file site.cfg under your unpacked MySQLdb directory, comment out the registry_key and set mysql_config to:

    mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config

  5. Carry on with the regular Python packages build from within MySQLdb directory:

    sudo python setup.py install

  6. If everything is fine above, test MySQLdb in a new terminal:

    python -c "import MySQLdb"

The above should return nothing if successful. The above example shows OS 10.4 and MySQL 5.0, substitute them with the your proper tools version.

Thierry Lam
Doesn't work on 10.6
Nick Sergeant
The mysql 10.6 dmg is not out yet, once it's released, give it another whirl.
Thierry Lam