I’m trying to run mod_wsgi 3.1 under Apache 2.2.14 using a non-default python installation on Mac OS X 10.6.
After downloading the mod_wsgi source I run:
sudo apachectl -k stop
then
./configure --with-python=/usr/local/Cellar/python/2.6.4/bin/python
make
sudo make install
I then start up apache again
sudo apachectl -k start
When I cat /var/log/httpd/error_log I see:
[Mon Dec 21 12:27:26 2009] [warn] mod_wsgi: Compiled for Python/2.6.4.
[Mon Dec 21 12:27:26 2009] [warn] mod_wsgi: Runtime using Python/2.6.1.
[Mon Dec 21 12:27:26 2009] [notice] Apache/2.2.14 (Unix) DAV/2 mod_wsgi/3.1 Python/2.6.1 configured — resuming normal operations
When I run otool -L mod_wsgi.so is see:
mod_wsgi.so:
/System/Library/Frameworks/Python.framework/Versions/2.6/Python (compatibility version 2.6.0, current version 2.6.1)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)
What gives? Why is it linking with the system framework?
Here is the output from my mod_wsgi configure and build commands:
Archimedes:mod_wsgi-3.1 awolf$ ./configure –with-python=/usr/local/Cellar/python/2.6.4/bin/python
checking for apxs2… no
checking for apxs… /opt/apache2/bin/apxs
checking Apache version… 2.2.14
configure: creating ./config.status
config.status: creating Makefile
Archimedes:mod_wsgi-3.1 awolf$ make
/opt/apache2/bin/apxs -c -I/usr/local/Cellar/python/2.6.4/include/python2.6 -DNDEBUG -Wc,’-arch x86_64′ mod_wsgi.c -L/usr/local/Cellar/python/2.6.4/lib -L/usr/local/Cellar/python/2.6.4/lib/python2.6/config -arch x86_64 -lpython2.6 -ldl
/Library/Webserver/build/libtool –silent –mode=compile gcc -prefer-pic -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -g -O2 -I/opt/apache2/include -I/opt/apache2/include -I/opt/apache2/include -arch x86_64 -I/usr/local/Cellar/python/2.6.4/include/python2.6 -DNDEBUG -c -o mod_wsgi.lo mod_wsgi.c && touch mod_wsgi.slo
In file included from /usr/local/Cellar/python/2.6.4/include/python2.6/Python.h:125,
from mod_wsgi.c:135:
/usr/local/Cellar/python/2.6.4/include/python2.6/modsupport.h:27: warning: ‘PyArg_ParseTuple’ is an unrecognized format function type
/Library/Webserver/build/libtool –silent –mode=link gcc -o mod_wsgi.la -rpath /opt/apache2/modules -module -avoid-version mod_wsgi.lo -L/usr/local/Cellar/python/2.6.4/lib -L/usr/local/Cellar/python/2.6.4/lib/python2.6/config -arch x86_64 -lpython2.6 -ldl
Archimedes:mod_wsgi-3.1 awolf$ sudo make install
Password:
/opt/apache2/bin/apxs -i -S LIBEXECDIR=/opt/apache2/modules -n ‘mod_wsgi’ mod_wsgi.la
/Library/Webserver/build/instdso.sh SH_LIBTOOL=’/Library/Webserver/build/libtool’ mod_wsgi.la /opt/apache2/modules
/Library/Webserver/build/libtool –mode=install cp mod_wsgi.la /opt/apache2/modules/
cp .libs/mod_wsgi.so /opt/apache2/modules/mod_wsgi.so
cp .libs/mod_wsgi.lai /opt/apache2/modules/mod_wsgi.la
cp .libs/mod_wsgi.a /opt/apache2/modules/mod_wsgi.a
chmod 644 /opt/apache2/modules/mod_wsgi.a
ranlib /opt/apache2/modules/mod_wsgi.a
Graham helped me solve this over on the mod_wsgi mailing list.
http://groups.google.com/group/modwsgi/browse_thread/thread/4046eaf290a49b1e/ae14888450de39f5#ae14888450de39f5
Here’s a summary:
The problem was my installation of python was done via Homebrew. Homebrew’s python is not installed as a framework OR dylib install so it could not be used for embedding (such as in Apache/mod_wsgi).
Instead I installed python 2.6.4 from source:
I was able to build a version of python 2.6.4 that I could then build
mod_wsgi with:
To confirm:
shows that python is now using the 2.6.4 framework and not the system one. When I start apache, I no longer get the version mismatch warnings.
I re-installed django, psycopg2, and so on into my new python installation and everything is working like a charm.
Thanks again for your help!