Jeffrey A. Zelt
jeffreyz at broadpark.no
Sun Mar 23 17:52:27 EDT 2008
I had trouble building mod-pyhon 3.3.1 on Mac OS X 10.5.2 (Leopard), so I thought I would share the solution here. I have installed Python 2.5.2 into /usr/local (to use instead of Leopard's default 2.5.1 distribution). It is not that v2.5.2 provides so many improvements over v2.5.1; rather, Apple has shown in the past that they do not upgrade their version of Python between major OX X updates, and I would like to be able to take advantage of all future improvements in v2.5.x and soon v2.6.x (possibly as early as this summer). I have also installed the Apache 2.2.8 web server (instead of Apples default Apache server, which I think is also v2.2.8). I did not touch/modify Apple's default Python 2.5.1 or Apache 2.2.8 installations in any way. First, I will describe the problem and then I will show the *solution* that solves this problem. Problem: If you perform a normal mod_python build, the copy of mod_python.so that is created by the build process has the python module import paths from Apple's Python 2.5.1 installation *hardwired* into it. I know this is so because I looked into the mod_python.so file (even though this is a binary file), and I could see strings that referred to Apple's Python 2.5.1 installation. Note that this occurred even though I specified the mod_python configure option: --with-python=/usr/local/bin/python2.5 (which is the Python 2.5.2 installation I installed myself). When I tried to connect to my Apache 2.2.8 web server with a request that was routed to mod_python (such as the /mpinfo testhandler), I received a generic 500 Server Error page in my web browser and the Apache error log file contained the following: [Sat Mar 15 17:19:48 2008] [error] python_init: Python version mismatch, expected '2.5.2', found '2.5.1'. [Sat Mar 15 17:19:48 2008] [error] python_init: Python executable found '/usr/local/bin/python'. [Sat Mar 15 17:19:48 2008] [error] python_init: Python path being used '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/ python25.zip:/System/Library/Frameworks/Python.framework/Versions/2.5/ lib/python2.5/:/System/Library/Frameworks/Python.framework/Versions/ 2.5/lib/python2.5/plat-darwin:/System/Library/Frameworks/ Python.framework/Versions/2.5/lib/python2.5/plat-mac:/System/Library/ Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib- scriptpackages:/System/Library/Frameworks/Python.framework/Versions/ 2.5/lib/python2.5/../../Extras/lib/python:/System/Library/Frameworks/ Python.framework/Versions/2.5/lib/python2.5/lib-tk:/System/Library/ Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload'. [Sat Mar 15 17:19:48 2008] [notice] mod_python: Creating 32 session mutexes based on 256 max processes and 0 max threads. [Sat Mar 15 17:19:48 2008] [notice] mod_python: using mutex_directory / tmp [Sat Mar 15 17:19:48 2008] [notice] Digest: generating secret for digest authentication ... [Sat Mar 15 17:19:48 2008] [notice] Digest: done [Sat Mar 15 17:19:49 2008] [notice] Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.7l DAV/2 mod_python/3.3.1 Python/2.5.1 SVN/1.4.6 configured -- resuming normal operations Notice that even though the Apache process found Python 2.5.2 in /usr/ local/bin (I was careful to set the PATH environment variable appropriately in my launchctl configuration file for the web server), the python module import paths all seem to refer to Apple's default Python 2.5.1 distribution (which does not have the mod_python package installed, of course). Needless to say, mod_python was not useable. Solution: 1. Before building mod_python, execute: $ cd /System/Library/Frameworks $ sudo mv Python.framework XXX_Python.framework 2. After building mod_python, revert this change with: $ cd /System/Library/Frameworks $ sudo mv XXX_Python.framework Python.framework In other words, the build process should look something like the following (the configure options you choose may be different that those I used): $ cd /System/Library/Frameworks $ sudo mv Python.framework XXX_Python.framework $ cd <mod_python distribution directory> $ ./configure \ > --with-apxs=/usr/local/apache2/bin/apxs \ > --with-python=/usr/local/bin/python2.5 \ > --with-max-locks=32 $ make $ sudo make install $ cd /System/Library/Frameworks $ sudo mv XXX_Python.framework Python.framework Conjecture: I am not a C programmer, but I would guess that there is a slight problem with the build system for mod_python on Leopard that needs to be fixed. If you supply the configure option: --with-python=/usr/local/bin/python2.5 the build process should ignore everything to do with Apple's Python 2.5.1 distribution, but it does not. It seems that the "sudo mv ..." commands from the recipe above are enough to temporarily hide Apple's Python 2.5.1 distribution from the mod_python build system so that a mod_python.so module can be built that is solely dependendent on the Python 2.5.2 distribution I specified in the configure options. Let's hope that the mod_python distribution is updated soon so that others are not bitten by this bug. Even if my conjecture is not correct, at least you have a recipe for successfully installing mod_python under the conditions I outlined above. Jeffrey
|