views:

237

answers:

3

I'm doing some introductory work with django which seems really easy (and fun) so far but I have been doing all this from Python 2.6 which I installed in /opt/local (RedHat 5.3) because the python that came with redhat was 2.4. I set up a symlink:

/usr/bin/python2.6 -> /opt/local/bin/python

and I have been using that for all the django stuff so far; i.e.

> python2.6 manage.py runserver

However, when I try to move on to production mode, mod_python isn't using the right version of python:

Mod_python error: "PythonHandler django.core.handlers.modpython"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 287, in HandlerDispatch
    log=debug)

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 461, in import_module
    f, p, d = imp.find_module(parts[i], path)

ImportError: No module named django

I have this in my /etc/httpd/conf/httpd.conf:

<Location "/chat">
 SetHandler python-program
 PythonHandler django.core.handlers.modpython
 SetEnv DJANGO_SETTINGS_MODULE chat.settings
 PythonDebug On
 PythonPath "['/www/django/chat', '/opt/local/lib/python2.6/site-packages/django/'] + sys.path"
</Location>

So my question is, how do I make mod_python look for python2.6 instead of python?

+3  A: 

You would have to rebuild mod_python against your python2.6 installation. Since mod_python loads python as a library the version is fixed at compile time.

Geoff Reedy
You wouldn't happen to know where apxs is on RedHat 5.3 would you?
puddingfox
@puddingfox It's in the httpd-devel package at /usr/sbin/apxs
Geoff Reedy
+2  A: 

Don't use mod_python any more. mod_wsgi is the recommended way to deploy Django appliations now.

Daniel Roseman
+1  A: 

You can rebuild mod_python to link against libpython dynamically so that you can pick up version updates to your libpython but it takes some chicanery.

You will need to edit the configure script for mod_python as follows (remove -L${PyLIBPL}):

$ diff configure.orig configure

LDFLAGS="${LDFLAGS} -L${PyLIBPL}"

LDFLAGS="${LDFLAGS}"

Then do

configure --with-python=/path/to/bin/python ; make; make install dance.

When you run:

ldd mod_python.so

you should see a line that looks like:

libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0

shreddd