开发者

Django, is possible to run two different versions?

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


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.


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


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.


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.


I use Wigwam for this sort of thing. It's a heavy-handed approach — there's a separate build of each of Apahce, Python, Django, etc. — but it works quite well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜