jamesbtate
jamesbtate

Reputation: 1399

How do I change which version of python mod_python uses

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?

Upvotes: 2

Views: 5056

Answers (3)

shreddd
shreddd

Reputation: 11413

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

Upvotes: 2

Daniel Roseman
Daniel Roseman

Reputation: 599630

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

Upvotes: 3

Geoff Reedy
Geoff Reedy

Reputation: 36011

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.

Upvotes: 4

Related Questions