what do i need to do so that mod_wsgi will find libmysqlclient.16.dylib? (osx 10.7 with apache mod_wsgi)

Posted by compound eye on Stack Overflow See other posts from Stack Overflow or by compound eye
Published on 2011-11-18T12:18:47Z Indexed on 2011/11/19 1:50 UTC
Read the original article Hit count: 364

Filed under:
|
|
|
|

I am trying to run django on osx 10.7 (lion) with apache mod_wsgi and virtualenv. My site works if I use the django testing server:

(baseline)otter:hello mathew$ python manage.py runserver

but it doesn't work when I run apache. The core of the error seems to be

Library not loaded: libmysqlclient.16.dylib

I think its to do with the path apache is using to locate libmysqlclient.16.dylib

when I run otool in the lib directory it looks good

otter:lib mathew$ pwd
    /usr/local/mysql/lib

otter:lib mathew$ otool -L libmysqlclient.16.dylib
    libmysqlclient.16.dylib:
      libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
      /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)

but from outside it can't find it

otter:lib mathew$ cd /
otter:/ mathew$ otool -L libmysqlclient.16.dylib
otool: can't open file: libmysqlclient.16.dylib (No such file or directory)

if i manually set DYLD_LIBRARY_PATH otool works

otter:lib mathew$ DYLD_LIBRARY_PATH=/usr/local/mysql/lib otter:lib mathew$ otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)

When I run the django testing server, my .bash_profile sets up the virtualenv and the path to the mysql dynamic library

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH
export PATH

When i run apache it finds my virtualenv paths, but it doesn't seem to find the dynamic library path.

I tried adding this path to /usr/sbin/envvars

DYLD_LIBRARY_PATH="/usr/lib:/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

and to /private/etc/paths.d/libmysql

/usr/local/mysql/lib

then restarted the machine but that has not changed the error message.

Error loading MySQLdb module: dlopen(/usr/local/python_virtualenv/baseline/lib/python2.7/site-packages/_mysql.so,

2): Library not loaded: libmysqlclient.16.dylib

I don't think is a permissions issue:

-rwxr-xr-x  1 root  wheel  3787328  4 Dec  2010 libmysqlclient.16.dylib

drwxr-xr-x  39 root    wheel   1394 18 Nov 21:07 /
drwxr-xr-x@ 15 root    wheel    510 24 Oct 22:10 /usr
drwxrwxr-x  20 root    admin    680  2 Nov 20:22 /usr/local
drwxr-xr-x  20 mathew  admin    680  9 Nov 21:58 /usr/local/python_virtualenv
drwxr-xr-x   6 mathew  admin    204  2 Nov 21:36 /usr/local/python_virtualenv/baseline
drwxr-xr-x   4 mathew  admin    136  2 Nov 21:26 /usr/local/python_virtualenv/baseline/lib
drwxr-xr-x  52 mathew  admin   1768  2 Nov 21:26 /usr/local/python_virtualenv/baseline/lib/python2.7
drwxr-xr-x  18 mathew  admin    612  4 Nov 21:20 /usr/local/python_virtualenv/baseline/lib/python2.7/site-packages
-rwxr-xr-x   1 mathew  admin  66076  2 Nov 21:18 /usr/local/python_virtualenv/baseline/lib/python2.7/site-packages/_mysql.so

What do i need to do so that mod_wsgi will find libmysqlclient.16.dylib?

apache and mysql are both 64 bit:

otter:lib mathew$ file /usr/sbin/httpd /usr/sbin/httpd: Mach-O universal binary with 2 architectures /usr/sbin/httpd (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/sbin/httpd (for architecture i386): Mach-O executable i386 otter:lib mathew$

otter:lib mathew$ file /usr/local/mysql/lib/libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib: Mach-O 64-bit dynamically linked shared library x86_64

© Stack Overflow or respective owner

Related posts about django

Related posts about osx