|
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
|