views:

171

answers:

5

Hello,

I have a server on which I have two sites built with Django and Python, one site is major site is build with an older version of django, the other with the newer release, I have upgraded to the new release and major aspects of my other site have broken, is it possible to tell the site to use a different version in say the python path? in the virtualhost?

I am desperate for help!

Some more info, it is on a linux and server users mod python, here is what I am trying with the vitrualhost

<Location "/">
        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE website.settings
        SetEnv PYTHON_EGG_CACHE /var/cache/pyeggcache
        SetEnv PYTHONPATH "sys.path + ['usr/lib/python2.6/site-packages/django2']"
        PythonDebug On
        PythonPath "['/var/www/website_live/src'] + ['/var/www/webiste_live/src/website'] + sys.path"
    </Location>

I have replaced the website name with 'website' my seperate version of django lives at /usr/lib/python2.6/site-packages/django2

+1  A: 

Of course it is, but it will require a bit of nestling. It depends mainly on which server you use.

The key point is the $PYTHONPATH. This variable stores, where Python looks for modules to embed. If you use

import django.conf

it really looks through all dirs in $PYTHONPATH and searches for a folder called django.

So the key is to manipulate $PYTHONPATH depending on where the request goes to. If you happen to use mod_python and Apache, it could look like this:

<VirtualHost *:80>
    DocumentRoot "/var/htdocs/old_django_project"
    ServerName old-django
    PythonPath "sys.path + ['/var/software/old_django']"
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/var/htdocs/new_django_project"
    ServerName new-django
    PythonPath "sys.path + ['/var/software/new_django']"
</VirtualHost>

Then, visiting http://old-django/ brings you to the old django instance, and the new-django likewise.

Boldewyn
+5  A: 

Yes, you could. I have blogged about this at length over here.

ayaz
A: 

It is possible, but in my experience of an environment that used different versions of both Django and Python it tends to end up getting messy, especially if you have more than one developer working on the projects. Each developer then needs to maintain two versions of Django and remember which features they can and cannot use.

StephenPaulger
I've found that by using virtualenv and pip (and storing it's requirements file in my code repository) makes maintenance practically a non-issue.
John Paulett
+5  A: 

When you have more than one site on a server, you should consider using something like virtualenv.

Using that you can setup different virtual environments and place site specific packages and such in there, instead of messing up your site-packages folder. It also makes development a lot easier as you easily can setup these environments on your local with specific versions of whatever you use.

This quickly becomes very handy if you use other apps, and this is something that Pinax uses very heavily. The easiest way to handle packages and versions is simply to create a requirements file.

googletorp
This is probably the best, and simplest way to go about it. It also makes development much easier too, if you follow the same setup locally.
Alex Jillard
A: 
Corey Porter