Graham- The version of Python 2.6.1 as supplied by Apple is incompatible with the postgres DB adapter psycopg2. A workaround is running:
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes to force python to run in 32 bit mode. This solved the problem while using the python development server. However, when I went to set up a production environment using mod_wsgi, psycopg2 started to throw the same error as before: Symbol not found: _PQbackendPID I imagine that mod_wsgi running in 64-bit mode is forcing python back into 64-bit mode also, which causes psycopg2 to fail. Perhaps I could force mod_wsgi to run in 32-bit mode also... but that kinda sucks. Then I found this: http://benkreeger.com/personal/conquering-symbol-not-found-_pqbackendpid which advised using Homebrew to install python and postgresql to resolve the issue. This did resolve the issue on the django development server in 64-bit mode. However, upon review of this advice I don't see why it is necessary to use the Homebrew python installation. I'll give it a shot with Apple's 2.6.1 now... On Dec 23, 3:11 pm, Graham Dumpleton <[email protected]> wrote: > 2009/12/24 Adam Wolf <[email protected]>: > > > Graham- > > > CONFIG_ARGS= '--prefix=/usr/local/Cellar/python/2.6.4' 'CC=/ > > Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2' 'CFLAGS=-O4 -march=core2 - > > mmmx -msse4.1 -w -pipe' 'LDFLAGS=-L/usr/local/Cellar/readline/6.0/lib' > > 'CPPFLAGS=-I/usr/local/Cellar/readline/6.0/include' > > > This is a python installation made by the new mac package management > > script Homebrew. I'm following this advice: > > Which is not installed as a framework install, nor even as a dylib > install. This possibly makes it unusable for embedding such as with > Apache/mod_wsgi as it only provides a static library and under MacOS X > it may not be possible to link them into dynamically loadable objects. > > Is there a specific reason why you cannot just use Python 2.6.1 as > supplied by Apple? What changes are there in 2.6.2-2.6.4 that you > cannot do without? > > Graham > > > > >http://benkreeger.com/personal/conquering-symbol-not-found-_pqbackendpid > > > to solve the problem described there. The alternative is to force > > everything, including mod_wsgi, to run in 32-bit mode which is not > > preferable to me. > > > Archimedes:config awolf$ ls -las /usr/local/Cellar/python/2.6.4/lib > > total 8376 > > 0 drwxr-xr-x 4 root wheel 136 Dec 19 18:33 . > > 0 drwxr-xr-x 8 root wheel 272 Dec 19 18:33 .. > > 8376 -r--r--r-- 2 root wheel 4285288 Dec 19 18:33 libpython2.6.a > > 0 drwxr-xr-x 631 root wheel 21454 Dec 19 18:33 python2.6 > > Archimedes:config awolf$ ls -las /usr/local/Cellar/python/2.6.4/lib/ > > python2.6/config > > total 8576 > > 0 drwxr-xr-x 12 root wheel 408 Dec 19 18:33 . > > 0 drwxr-xr-x 631 root wheel 21454 Dec 19 18:33 .. > > 88 -rw-r--r-- 1 root wheel 42950 Dec 19 18:33 Makefile > > 40 -rw-r--r-- 1 root wheel 18265 Dec 19 18:33 Setup > > 8 -rw-r--r-- 1 root wheel 368 Dec 19 18:33 Setup.config > > 8 -rw-r--r-- 1 root wheel 41 Dec 19 18:33 Setup.local > > 8 -rw-r--r-- 1 root wheel 2077 Dec 19 18:33 config.c > > 8 -rw-r--r-- 1 root wheel 1457 Dec 19 18:33 config.c.in > > 16 -rwxr-xr-x 1 root wheel 7122 Dec 19 18:33 install-sh > > 8376 -r--r--r-- 2 root wheel 4285288 Dec 19 18:33 libpython2.6.a > > 16 -rwxr-xr-x 1 root wheel 7431 Dec 19 18:33 makesetup > > 8 -rw-r--r-- 1 root wheel 2060 Dec 19 18:33 python.o > > Archimedes:config awolf$ file /usr/local/Cellar/python/2.6.4/lib/ > > python2.6/config/libpython* > > /usr/local/Cellar/python/2.6.4/lib/python2.6/config/libpython2.6.a: > > current ar archive random library > > > Thanks, > > > -Adam > > > On Dec 22, 7:54 pm, Graham Dumpleton <[email protected]> > > wrote: > >> 2009/12/23 Adam Wolf <[email protected]>: > > >> > Hello, > > >> > 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) > > >> > It linking with the system framework- not the one I installed in /usr/ > >> > local using Homebrew. > > >> > Upon Graham's advice at StackOverflow (http://stackoverflow.com/ > >> > questions/1942462/modwsgi-on-snow-leopard-python-version-mismatch) I > >> > tried cleaning my build and then running the configure script with -- > >> > disable-framework > > >> > ./configure --with-python=/usr/local/Cellar/python/2.6.4/bin/python -- > >> > disable-framework > > >> > This gave me the same results. > > >> > Here is the output of one such build attempt: > > >> > Archimedes:~ awolf$ sudo rm /opt/apache2/modules/mod_wsgi.so > >> > Password: > >> > Archimedes:~ awolf$ cd ~/Downloads/mod_wsgi-3.1 > >> > Archimedes:mod_wsgi-3.1 awolf$ rm -rf build > >> > Archimedes:mod_wsgi-3.1 awolf$ make distclean > >> > rm -rf .libs > >> > rm -f mod_wsgi.o mod_wsgi.la mod_wsgi.lo mod_wsgi.slo mod_wsgi.loT > >> > rm -f config.log config.status > >> > rm -rf autom4te.cache > >> > rm -f Makefile Makefile.in > >> > Archimedes:mod_wsgi-3.1 awolf$ ./configure --with-python=/usr/local/ > >> > Cellar/python/2.6.4/bin/python --disable-framework > >> > 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 > > >> That this is using: > > >> -L/usr/local/Cellar/python/2.6.4/lib > >> -L/usr/local/Cellar/python/2.6.4/lib/python2.6/config -lpython2.6 > > >> indicates --enable-framework did what it was mean't to. Ie., switch > >> from using -F/-framework to -L/-l. > > >> Can you look in: > > >> -L/usr/local/Cellar/python/2.6.4/lib/python2.6/config/Makefile > > >> and post the value of the CONFIG_ARGS variable. > > >> Is this Python installation one you installed from source, or is it a > >> binary package from somewhere else such as MacPorts? MacPorts give so > >> much grief. > > >> While you at it, what do you get for: > > >> ls -las /usr/local/Cellar/python/2.6.4/lib > >> ls -las /usr/local/Cellar/python/2.6.4/lib/python2.6/config > > >> file /usr/local/Cellar/python/2.6.4/lib/python2.6/config/libpython* > > >> Graham > > >> > /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 > >> > /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 > >> > ---------------------------------------------------------------------- > >> > Libraries have been installed in: > >> > /opt/apache2/modules > > >> > If you ever happen to want to link against installed libraries > >> > in a given directory, LIBDIR, you must either use libtool, and > >> > specify the full pathname of the library, or use the `-LLIBDIR' > >> > flag during linking and do at least one of the following: > >> > - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable > >> > during execution > > >> > See any operating system documentation about shared libraries for > >> > more information, such as the ld(1) and ld.so(8) manual pages. > >> > ---------------------------------------------------------------------- > >> > chmod 755 /opt/apache2/modules/mod_wsgi.so > >> > Archimedes:mod_wsgi-3.1 awolf$ sudo apachectl -k stop > >> > Archimedes:mod_wsgi-3.1 awolf$ sudo apachectl -k start > > >> > Thanks, > > >> > Adam > > >> > -- > > >> > You received this message because you are subscribed to the Google > >> > Groups "modwsgi" group. > >> > To post to this group, send email to [email protected]. > >> > To unsubscribe from this group, send email to > >> > [email protected]. > >> > For more options, visit this group > >> > athttp://groups.google.com/group/modwsgi?hl=en. > > > -- > > > You received this message because you are subscribed to the Google Groups > > "modwsgi" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/modwsgi?hl=en. -- You received this message because you are subscribed to the Google Groups "modwsgi" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/modwsgi?hl=en.
