Ok - you have mysql server installed into /usr/local/mysql and you are thinking - yes I can connect from python to it like on my linux box ... but on 10.6 OSX is a bit different.
First a bit of light of what is happening:
- the python you run from /usr/bin/python is compiled for 64 and 32 bits ! that is a fat binary as is called. do a file /usr/bin/python and you will see something like
usr/bin/python: Mach-O universal binary with 3 architectures /usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/bin/python (for architecture i386): Mach-O executable i386 /usr/bin/python (for architecture ppc7400): Mach-O executable ppc
- the mysql server that you installed is 32 bits only !
- the code for MySQLdb can be compiled for either architecture but not two at ones as into the fat binary above
Steps to instal
- have the mysql server installed - source, archive or dmg - the best location to install is /usr/local/mysql
- if you use virtual environment it is best to extract the 32 bits version from the fat python into your environment. same goes for 64 bits if you use it.
to extract do something like this after you have your virtual environment -
cp /my_virtual/env/bin/python /my_virtual/env/bin/python.fat lipo -remove x86_64 /my_virtual/env/bin/python.fat -output /my_virtual/env/bin/python -- to check if you are using 32 bits python >>> import sys >>> sys.maxint 2147483647
- install mysql-python wit pip/easy_install or from source
errors you may see and how to solve them
>>> import MySQLdb Traceback (most recent call last): File "
This is because the dynamic loader can not find the library libmysqlclient.16.dylib which is located into /usr/local/mysql/lib - to solve it add this to your .profile file", line 1, in File "/Users/silviud/PROGS/PYTHON/Environments/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 19, in import _mysql ImportError: dlopen(/Users/silviud/PROGS/PYTHON/Environments/2.6/lib/python2.6/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib Referenced from: /Users/silviud/PROGS/PYTHON/Environments/2.6/lib/python2.6/site-packages/_mysql.so Reason: image not found
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib
This is what I have done to make it work !
I've seen other solutions where you would have to choose the python architecture with an environment variable as
export VERSIONER_PYTHON_PREFER_32_BIT=yesor
to have it system wide available with
defaults write com.apple.versioner.python Prefer-32-Bit -bool yesbut NONE worked for me except what I shown above.
I even tried to load static the mysql library into the mysql-python by changing the site.cfg from the dist but no luck.
In any case I don't suggest you do this for the a system wide installation - use virtual environment!
0 comments:
Post a Comment